Indexierungsprozess
Der Suchindex wird durch Abrufen von Informationen aus den einzelnen Anwendungen gemäß einer durch den Administrator festgelegten Zeitplanung generiert. Die Suchanwendung nutzt für die Erstellung und Aktualisierung des Suchindexes den Zeitplanungsservice von IBM® WebSphere Application Server. Der Index muss auf jedem Knoten implementiert wird, auf dem die Unternehmensanwendung "Suche" ausgeführt wird.
Übersicht zu Indexierung
Die Erstellung des Suchindex läuft in mehreren Stufen ab:- Crawlersuche
- Bei der Crawlersuche wird der Inhalt der jeweiligen Anwendungen gelesen, um Einträge für die Indexierung zu erstellen.
Während des Crawlersuchprozesses fordert die Suchanwendung von jeder IBM Connections-Anwendung eine Basisliste an. Diese Basislisten werden erstellt, wenn die einzelnen Anwendungen Abfragen zu den in ihren Datenbanken gespeicherten Daten senden, basierend auf den Parametern, die die Suchanwendung in ihrer HTTP-Anforderung übergibt.
Die Inhalte der Basislisten werden persistent auf der Festplatte gespeichert. Sie werden gelöscht, wenn die nächste inkrementelle Indexierungstask erfolgreich abgeschlossen ist.
- Dateiinhaltsextraktion
- Die Suche stellt einen Dokumentkonvertierungsservice bereit, der die Inhalte
der zu indizierenden Dateien extrahiert. In der Phase der Dateiinhaltsextraktion lädt der Dokumentkonvertierungsservice Dateien
in einen temporären Ordner im Indexverzeichnis herunter, konvertiert sie in einfachen Text und speichert diesen Text in dem
Ordner, der durch die WebSphere Application Server-Variable EXTRACTED_FILE_STORE
definiert ist. Der extrahierte Text wird anschließend indexiert.
IBM Connections unterstützt die Indexierung von Dateianhangsinhalten in den Anwendungen "Dateien" und "Wikis" sowie in IBM FileNet-Dokumenten.
Die Dateiinhaltsextraktion findet in dem dafür definierten Zeitplan statt, standardmäßig alle 20 Minuten. Die Dateiinhalte sind nicht durchsuchbar, bis die Dateiinhaltskonvertierung und die nächste Indexierungstask abgeschlossen ist.
- Indexierung
- Während der Indexierungsphase werden die Einträge in den persistenten Basislisten in Lucene-Dokumente verarbeitet, die
wiederum in eine Datenbanktabelle serialisiert werden, die als Indexcache fungiert.
Sobald die Indexierungsphase abgeschlossen ist, werden die Basislisten von der Platte gelöscht. Ein Fortsetzungstoken markiert den Punkt, an dem die letzte Basislistenanforderung beendet wurde, sodass die Suchanwendung bei der nächsten Basislistenanforderung an diesem Punkt fortfahren kann. Mithilfe dieses Fortsetzungstokens hat die Suchanwendung die Möglichkeit, nur die neuen Daten abzurufen, die nach der letzten Generierung und Durchsuchung der Basislisten hinzugefügt wurden.
Die Crawlersuchen- und Indexierungsstufen für mehrere Anwendungen laufen gleichzeitig bei der inkrementellen Indexierung im Vordergrund ab. Wenn beispielsweise eine Indexierungstask erstellt wird, die Dateien, Aktivitäten und Blogs indexiert, werden all diese Anwendungen durchsucht und gleichzeitig werden die Indizes zum Datenbankcache hinzugefügt. Während der ersten Indexierung im Hintergrund läuft nur die Crawlingphase für mehrere Anwendungen zugleich ab.
Bei der inkrementellen Indexierung im Vordergrund nach Abschluss der Crawlersuch- und Indexierungsphasen werden alle Knoten darüber benachrichtigt, dass sie ihren Index erstellen können. Zu diesem Zeitpunkt beginnt das Indexerstellungsprogramm auf den einzelnen Knoten mit der Extrahierung der Einträge aus dem Datenbankcache und speichert sie im Index des lokalen Dateisystems.
- Indexerstellung
- Die Indexerstellung verweist auf die Deserialisierung und das Schreiben der Lucene-Dokumente in den Suchindex. Dieser
Prozess tritt nur bei der inkrementellen Indexierung im Vordergrund auf. Während der
Indexerstellung nutzt das
Indexerstellungsprogramm die Einträge aus dem Datenbankcache und speichert sie
in einem Index im lokalen Dateisystem. Jeder Knoten verfügt über ein eigenes Indexerstellungsprogramm. So werden die
Crawlersuche und die Vorbereitung der Einträge in einer Netzimplementierung nur einmal
durchgeführt und anschließend wird der Index auf jedem Knoten aus den Informationen
erstellt, die bereits verarbeitet wurden.
Während der ersten Indexierung im Hintergrund werden die Indexierungsphase und die Indexerstellungsphase zusammengeführt und es wird keine Serialisierung oder Deserialisierung der Datenbank vorgenommen.
- Nachverarbeitung
- Nach der Indexerstellung (bei inkrementeller Indexierung im Vordergrund) oder
Indexierung (bei der ersten Indexierung im Hintergrund) wird eine
Nachverarbeitung für die neuen Indexeinträge durchgeführt, bei der den
Suchergebnissen Metadaten hinzugefügt werden. Zu dieser Verarbeitung gehören ein
Rollup für Lesezeichen und das Hinzufügen von Dateiinhalten zu den Suchergebnissen
der Anwendung "Dateien".
Beim Rollup für Lesezeichen werden Daten zu öffentlichen Lesezeichen, die auf dieselbe URL verweisen, zusammengefasst. Wenn z. B. 1000 Benutzer ein öffentliches Lesezeichen für dieselbe URL erstellt haben und ein Benutzer nach dieser URL sucht, werden nicht 1000 Suchergebnisse zurückgegeben, sondern nur ein Lesezeichen. Dieses zurückgegebene Lesezeichen enthält, zusammengefasst in einem einzigen Suchergebnis, die Daten für alle 1000 Lesezeichen. Alle Tags und Personen, die den einzelnen Lesezeichen zugeordnet sind, sind dann diesem einen Dokument zugeordnet.
Wenn zwei Benutzer ein Lesezeichen für dasselbe interne Dokument, z. B. eine Wiki-Seite, setzen, wird auch diese Wiki-Seite mit dem Lesezeichen zusammengefasst. Wenn ein Benutzer nach der Wiki-Seite oder dem Lesezeichen, das für die Wiki-Seite erstellt wurde, sucht, wird in den Suchergebnissen nur ein Ergebnis zurückgegeben. Die dem Lesezeichen und der Wiki-Seite zugeordneten Tags und Personen werden in einem Dokument kombiniert.
Indexierungstypen
In der folgenden Tabelle werden die Unterschiede zwischen den verschiedenen Indexierungstypen erläutert:Indexierung im Vordergrund | Indexierung im Hintergrund | |
---|---|---|
Erste Indexierung | Der erste Index wird mit der Standardtask "15min-search-indexing-task"
erstellt. Alternativ dazu kann er auch mit einer benutzerdefinierten Indexierungstask erstellt werden, die wiederum selbst durch den Befehl "SearchService.addIndexingTask" oder einen einmalig ausgeführten Befehl wie SearchService.indexNow(String applicationNames) erstellt wird. Dieser Index wird für die Suche und für die weitere Indexierung verwendet. Der Datenbankcache wird nicht verwendet. |
Ein Index wird mit dem Befehl "SearchService.startBackgroundIndex" erstellt. Der Befehl zur Indexierung im Hintergrund erstellt einen einmaligen Index an einer angegebenen Speicherposition auf der Platte. Dieser Index wird nicht für die Suche verwendet. Der Datenbankcache wird nicht verwendet. |
Inkrementelle Indexierung | Der Index wird mit der Standardtask "15min-search-indexing-task" aktualisiert. Alternativ dazu kann er auch mit einer benutzerdefinierten Indexierungstask aktualisiert werden, die wiederum selbst durch den Befehl "SearchService.addIndexingTask" oder einen einmalig ausgeführten Befehl wie SearchService.indexNow erstellt wird. Dieser Index wird für die Suche und für die weitere Indexierung verwendet. Der Datenbankcache wird verwendet. |
Ein Hintergrundindex kann mit dem Befehl "SearchService.startBackgroundIndex" aktualisiert werden. Dieser Index wird nicht für die Suche verwendet. Der Datenbankcache wird nicht verwendet. |
Indexierungsschritte
Der Indexierungsprozess umfasst folgende Schritte:- Erste Indexierung im Hintergrund
- Alle Seiten der Basisliste werden durchsucht und auf der Platte gespeichert.
- Die Dateiinhalte werden extrahiert und auf der Platte gespeichert.
- Die Basislistenseite von der Platte wird durchsucht.
- Die Basislisteneinträge werden in Lucene-Dokumenten indexiert.
- Die Dokumente werden in den Lucene-Index geschrieben.
- Dies wird wiederholt, bis alle als persistent definierten Basislisten durchsucht wurden.
- Inkrementelle Indexierung im Vordergrund
- Der Knoten mit der Scheduler-Zuordnung durchsucht alle Seiten der Basisliste und speichert sie auf der Platte.
- Die Basislistenseite von der Platte wird durchsucht.
- Die Basislisteneinträge werden in Lucene-Dokumenten indexiert.
- Die Lucene-Dokumente werden im Datenbankcache serialisiert.
- An alle Suchknoten wird eine JMS-Nachricht über die Fertigstellung der Serialisierung gesendet.
- Jeder Knoten deserialisiert die Lucene-Dokumente in den Lucene-Index.