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:
Tabelle 1. Arten der Indexierung
  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
  1. Alle Seiten der Basisliste werden durchsucht und auf der Platte gespeichert.
  2. Die Dateiinhalte werden extrahiert und auf der Platte gespeichert.
  3. Die Basislistenseite von der Platte wird durchsucht.
  4. Die Basislisteneinträge werden in Lucene-Dokumenten indexiert.
  5. Die Dokumente werden in den Lucene-Index geschrieben.
  6. Dies wird wiederholt, bis alle als persistent definierten Basislisten durchsucht wurden.
Inkrementelle Indexierung im Vordergrund
  1. Der Knoten mit der Scheduler-Zuordnung durchsucht alle Seiten der Basisliste und speichert sie auf der Platte.
  2. Die Basislistenseite von der Platte wird durchsucht.
  3. Die Basislisteneinträge werden in Lucene-Dokumenten indexiert.
  4. Die Lucene-Dokumente werden im Datenbankcache serialisiert.
  5. An alle Suchknoten wird eine JMS-Nachricht über die Fertigstellung der Serialisierung gesendet.
  6. Jeder Knoten deserialisiert die Lucene-Dokumente in den Lucene-Index.