Such-Engine Lucene in Version 2.9 erschienen

Hinter vielen Suchfeldern im Web verbirgt sich die freie Java-Bibliothek Lucene. Version 2.9 bringt eine Reihe wichtiger Neuerungen.

In Pocket speichern vorlesen Druckansicht 9 Kommentare lesen
Lesezeit: 5 Min.
Von
  • Isabel Drost
  • Dr. Oliver Diedrich

Lucene ist eine freie Java-Bibliothek zur Suche in beliebigen Textdokumenten, ursprünglich von Doug Cutting geschrieben, die seit acht Jahren als Projekt der Apache Software Foundation von einer großen, breit gefächerten Community entwickelt wird. Prominente Lucene-Anwender sind beispielsweise Wikipedia, LinkedIn und AOL.

Die frisch veröffentlichte Version 2.9 bringt eine Reihe von Neuerungen, die der Lucene-Committer Uwe Schindler auf dem letzten Apache Hadoop Get Together in Berlin vorgestellt hat. Besonders spannend für Lucene-Nutzer sind die vielen Performance-Verbesserungen. Die neue Version bringt segmentweise Suche und Caches, sodass nicht mehr bei jeder Veränderung des Datenbetandes alle Segmente des Index neu geladen werden müssen. Hinzu kommen Suchen fast in Echtzeit und Optimierungen an dem Collector- und Scorer-API, die für die Identifikation und Sortierung der Suchtreffer verantwortlich sind. Erste Analysen liefern beeindruckende Ergebnisse.

Besonders die Verlagerung der internen Suchlogik auf die Segmentebene kann in einer Vielzahl von Fällen Laufzeitverbesserungen mit sich bringen. Meist verursachen Updates des Index nur an wenigen internen Strukturen Veränderungen. Die segmentweise Suche nutzt dies aus, sodass diese Strukturen bei wiederholtem Öffnen eines Index nicht oder nur teilweise geladen werden müssen. Dadurch verringert sich der Zeitbedarf beim erneuten Öffnen des Index und bestehende Caches können wiederverwendet werden. Dies wirkt sich auch positiv auf die Garbage-Collection-Zyklen aus.

Neben der Verbesserung des Laufzeitverhaltens ist den Entwicklern auch ein weiterer Schritt in Richtung flexibler Indizierung gelungen. Das bereits in die Jahre gekommene Analysis-API wurde als "deprecated" markiert und durch ein neues, stark typisiertes API ersetzt, das es Entwicklern ermöglicht, beliebige Attribute auf Token-Ebene zu definieren. Auf diese Weise können zu indexierende Terme mit Zusatzinformationen angereichert werden, die dann in späteren Analyseschritten oder zur Indexierungszeit verwendet werden. Ein Beispiel wäre die Markierung von Termen, die Orte, Namen oder Unternehmen darstellen, die sogenannte Named Entity Recognition. Das neue, so genannte "TokenStream"-API bringt es allerdings mit sich, dass Implementierungen, die auf Basis einer früheren Lucene-Version entwickelt wurden, auf die neue API portiert werden müssen.

Vor allem für Geo- und Produkt-Suchen interessant ist die mit Trie-Strukturen optimierte numerische Range-Suche. Mit ihr lassen sich beispielsweise Suchen nach Produkten einer vorgegebenen Preisspanne sehr viel effizienter und schneller als bisher ausführen. Außerdem wurde das Highlighting optimiert, sodass bei Treffern in großen Dokumenten die Hervorhebung von Treffer-Worten jetzt sehr viel schneller möglich ist.

Hinzu kommen neue Query-Typen, Verbesserungen hinsichtlich Payload-Queries sowie neue Multi-Term-Queries, die beispielsweise Wildcards erlauben. Die für die Analyse der zu durchsuchenden Dokumente verantwortlichen Komponenten unterstützen jetzt auch die Sprachen Persisch und Arabisch, die Unterstützung von Chinesisch wurde verbessert.

Neben den Weiterentwicklungen am Lucene-Core sind auch neue Contrib-Module Teil des Release 2.9. Ein zuvor als "Local Lucene" bekanntes Projekt wurde unter dem Namen lucene-spatial aufgenommen. Es ermöglicht lokale Suche, Umkreissuche sowie Filter und Sortierung von Suchergebnissen entsprechend ihrer geographischen Lage auf Basis verschiedener Referenzsysteme (GeoHash und Cartesien Tiers). Mit lucene-remote entstand ein weiteres Modul. Es verschiebt die Abhängigkeit zu Java RMI aus dem Lucene-Kern in ein optionales Jar. Diese Umstrukturierung ist vor allem für Nutzer interessant, die Lucene auf Plattformen einsetzen wollen, auf denen nicht die vollständige Java-Bibliothek zur Verfügung steht – etwa der Android Plattform.

Mit Lucene 2.9 nimmt auch ein neuer und weitaus flexiblerer Query-Parser Einzug in die Riege der Contrib-Module. Er bietet Entwicklern komfortable Erweiterungsmöglichkeiten durch eine klare Trennung zwischen Syntax und dessen interner Darstellung. Die Syntax des Query Parsers des Lucene-Kerns wird von diesem Modul vollständig unterstützt.

Das neue Release bringt neben vielen Neuerungen auch einige Änderungen im API. Daher empfiehlt es sich, die Änderungen vor einem Upgrade genau zu überprüfen und sicherheitshalber den eigenen Quellcode neu zu übersetzen, um eventuelle Inkompatibilitäten schnell identifizieren zu können.

Version 2.9 wird das letzte Release vor dem Versionssprung auf 3.0 sein, der für die nahe Zukunft angekündigt ist. In Version 3.0 wird der momentan als "deprecated" markierte Code nicht mehr enthalten sein. Außerdem ist mit Lucene 3.0 erstmals mindestens eine JVM in Version 1.5 erforderlich.

Eine detaillierte Analyse der Neuerungen in Lucene 2.9 ist in Form eines Webinars online verfügbar. Die Anfang November stattfindende Apache Con US bietet in Trainings, zwei Konferenztracks sowie verschiedenen Anwendertreffen die Möglichkeit, persönlich mit den Entwicklern Erfahrungen auszutauschen. (odi)