Neue Features im Überblick

Apache Lucene 4.0

Uwe Schindler

Apache Lucene geht in die nächste Runde: Lange Zeit war das Dateiformat zusammen mit den Datentypen und Strukturen zur Ablage des Index, fest vorgegeben. Seit Doug Cutting die erste Version vor 13 Jahren vorstellte, wurde dieses Format nur geringfügig geändert. Nach langjähriger Entwicklungszeit erscheint nun parallel zur aktuellen Version 3.6.1 die neue Version 4.0. Neben dem Update des Indexformats auf ein über „Codecs“ flexibel anpassbares Framework, gibt es aber auch noch viele andere Neuerungen: Durch neue Statistikdaten, die jetzt beim Indexieren mit abgelegt werden können, ist es auch möglich, das bisherige pure TF-IDF Ranking von Lucene durch moderne Varianten wie BM25 zu ersetzen. Lucene 4.0 wird mit einer Vielzahl von neuen Codecs und Ranking-Funktionen ausgeliefert.

Unter der Überschrift „Flexible Indexing“ läuft ein Re-Design des Fileformats von Lucene. Mit der Version 4.0 ist es erstmals möglich, auf einfache Weise die Speicherung der Index-Daten wie das Term-Dictionary, die Posting-Lists, gespeicherte Feldinhalte oder Payloads anzupassen (ohne den originären Quelltext zu patchen). Zwischen die bereits bekannten Komponenten IndexWriter/IndexReader und der Directory-Klasse (low-level I/O Komponente von Lucene) wurde der sogenannte Codec-Layer eingefügt (Abb. 1).

Abb. 1: Übersicht über die Einordnung des neuen „Codec Layer“ in Lucene 4.0

Während der Index aufgebaut wird, erhält das Codec alle Terme, die Positionen und Dokumentnummern. Es hat dann die Aufgabe diese Informationen unter Benutzung der Directory-Klasse auf das Speichermedium zu schreiben. Damit sind alle Möglichkeiten offen, das Dateiformat beliebig anzupassen. Gemeinsam ist allen Datendateien nur der Header, der eine Datei eindeutig als zu Lucene gehörig markiert, und der Name der Codec-Komponente, die für diese Datei zuständig ist. Wie allerdings zum Beispiel das Term-Dictionary dann schließlich intern strukturiert wird und auf der Platte materialisiert wird, ist komplett dem Codec überlassen.

Welches Codec zum Indexieren benutzt wird, kann dem IndexWriter in seiner Konfiguration mitgegeben werden. Dokumente bestehen in Lucene aus mehreren Felden mit eindeutigen Namen, wie z.B. „title“, „content“, „keywords“, so dass neben dem allgemeinem Indexformat auch für jedes Feld ein anderes „PostingsFormat“ angegeben werden kann, was schließlich dafür zuständig ist, das Term Dictionary und die Dokument-Liste für jeden Term abzuspeichern. Neben dem Standard-Codec („Lucene40“) gibt es noch zahlreiche, für verschiedene Anwendungszwecke geeignete Formate, wie zum Beispiel „Pulsing“, „Blockpostings“ oder „Simple Text“. Letzteres ist sehr gut für Debugging-Zwecke einsetzbar, da es alles im Textformat ablegt und die Indexdateien dadurch mit einem einfachen Texteditor betrachtbar sind. Alle diese Zusatz-Codecs sind in einem eigenen Modul zu finden. Nähere Informationen findet der Leser in den Javadocs oder einigen Blogposts, welche die Internas dieser Codecs erklären.

Die Codecs sind nicht nur für das Dateiformat zuständig, auch die verwendeten Algorithmen und Strukturen zum Lookup von Termen und Dokumenten sind anpassbar. Es ist jedem Codec überlassen, wie es beim Schreiben und Lesen die Index-Strukturen im Programmcode abbildet, solange nach außen hin die vorgegebenen API Interfaces implementiert werden.

Geschrieben von
Uwe Schindler
Kommentare

Schreibe einen Kommentar

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