Allgemein Da das gleichzeitige Schreiben und Lesen auf dem selben Index nicht möglich ist (write-lock-exception), muss ein temporärer Sekundärindex erstellt werden, der anschließend mit dem Hauptindex verschmolzen wird. Zu beachten ist, dass der Hauptindex sehr groß werden kann, wenn das gesamte Volumen von 360 GB erfolgreich indiziert ist. Theoretisch könnte der Index immer geschlossen und wieder geöffnet werden. Doch es ist anzunehmen dass die Performanz darunter leidet. Nachfolgendes Verfahren sollte nur für das Aktualisieren des Indexes verwendet werden. Es ist schlecht geeignet für die erstmalige Erstellung des Indexes, da der Sekundärindex dann alles beinhaltet (Hauptindex leer) und das Verschmelzen ev. sehr lang dauern kann. Es ist anzunehmen, dass es bei Lucene schneller geht zu einem großen Index einen kleineren Index hinzuzufügen als umgekehrt. Erkennung ob Dateien aktuell sind Prüfen ob sich das Modifikationsdatum (last-modified) der Datei seit der letzten Indizierung geändert hat. Somit muss dieses im Index gespeichert werden. Ein inhaltlicher Vergleich (per MD5-Checksumme) falls sich nur last-modified einer Datei geändert hat ist nicht notwendig. In diesem Fall wird die komplette Datei neu in den Index geschrieben.
Komplettes Verfahren
- Öffne IndexReader auf Hauptindex (IndexReader: Beinhaltet (irrsinnigerweise) Funktionalität zum Löschen von Dokumenten)
- Erstelle IndexWriter auf neuen Sekundär bzw. Temporär-Index (IndexWriter: Beinhaltet Funktionalität zum hinzufügen von Dokumenten)
- Laufe rekursiv über die Verzeichnisse und Dateien des File-Servers.
- Hole per Suchanfrage an den Index das zugehörige indizierte Dokument (falls vorhanden)
- Fallunterscheidung:
- 1. Fall: Datei ist im Index aktuell
=> nichts tun
- 2. Fall: Datei ist im Index, aber nicht mehr aktuell
=> Lösche altes Dokument im Hauptindex
=> Schreibe neues Dokument in Sekundärindex
- 3. Fall: Datei ist nicht im Index
=> Schreibe Dokument in Sekundärindex
- 4. Fall: (Spezialfall) Im Index ist eine Datei, die auf dem File-Server nicht mehr vorkommt (gelöscht worden)
=> Lösche Dokument im Hauptindex Bemerkung: Für die Erkennung dieses Falles muss noch eine geeignete und effiziente Erkennungsstrategie ausgearbeitet werden.
- Hauptindex enthält jetzt nur noch aktuelle Dokumente
- Sekundärindex enthält alle neuen bzw. aktualisierten Dokumente
- Verschmelze Sekundärindex mit Hauptindex (Lucene bietet hierfür die entsprechende Funktionalität an)
- Lösche Sekundärindex