Apache Lucene 4.0

Zwischen dem IndexReader und dem Dateisystem ist ebenfalls das Codec angesiedelt: Sobald ein Index geöffnet wurde, fragt IndexReader das Codec nach Implementationen der abstrakten Klassen, welche die jeder Lucene-Suche zugrundeliegenden Interfaces zur Verfügung stellen (siehe Abb. 2 mit Fields, Terms DocsEnum, DocsAndPositionsEnum). Dazu liest IndexReader die Index-Metadaten (Commits, Version,…) und die Liste der einzelnen Segmente (SegmentInfos): Jeder Index besteht nämlich aus einzelnen Teilen, zu denen bei jedem Update ein neues Set von zusätzlichen Dateien abgelegt wird. Zwischenzeitlich können diese Segmente von IndexWriter zu neuen Segmenten verschmolzen werden, um die absolute Anzahl an Index-Dateien gering zu halten. Jedes dieser Segmente kann durch ein anderes Codec geschrieben worden sein, so dass es durchaus Indizes gibt, die gemischte Dateiformate haben. Dies ist zum Beispiel der Fall, wenn ein Index aus Lucene 3 geöffnet und neue Dokumente mit der Version 4.0 hinzugefügt wurden. Solange die älteren Segmente im Index, die von Version 3 erzeugt wurden, nicht mit anderen verschmolzen werden (und dann mit dem neuen Codec für Version 4.0 geschrieben werden), bleiben diese bestehen. Wie man sich denken kann, ist also die Rückwärts-Kompatibilität zu Lucene 3 mit einem Codec implementiert. Hierbei ist jedoch zu beachten, dass dieses Codec nur lesen, nicht jedoch schreiben kann (es ist also mit Lucene 4 nicht möglich, einen Index zu erzeugen, der zu Lucene 3 kompatibel ist).

Abb. 2: Das neue vierdimensionale API für den Zugriff auf Felder, Terme, Dokumente und Termpositionen

Um das passende Codec (bzw. Postingsformat für die einzelnen Felder eines Indexes) zu finden, benutzt Lucene das aus Java bekannte Service Provider Interface (SPI), so dass alle benutzerdefinierten Codecs mit diesem Mechanismus adressierbar sein müssen. Dies macht es einfach, Anwendungen zu schreiben, die ohne weitere Konfiguration Indizes lesen können, die von beliebigen Codecs erzeugt wurden, solange die nötige JAR-Datei mit dem Codec und den SPI-Metadaten im Classpath vorhanden ist. Es ist somit auch möglich, die Lucene-Index-Toolbox Luke [1] zu verwenden, um einen solchen Index zu öffnen.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.