Blog

 

Ausblick auf Lucene 4

Lucene hat sich mittlerweile zum De-facto-Standard im Bereich der Open Source Suchlösungen durchgesetzt. Zusammen mit Apache Solr, der Search Server Version, ist Apache Lucene kommerziellen Suchlösungen mindestens ebenbürtig.

 

Umso interessanter ist ein Blick in die Zukunft der beiden genannten Projekte, die seit letztem Jahr durch eine Zusammenführung noch stärker verzahnt sind. Dieser Beitrag beschäftigt sich mit einigen spannenden Neuerungen, die mit Lucenes Version 4.0 offiziell Einzug finden werden.

 

Fehlende Abwärtskompatibilität

Eines gleich vorweg: Wer glaubt, er könne bestehende Projekte von Lucene 3.x auf 4.0 portieren, ist unter Umständen auf dem Holzweg. Das Indexformat wird nicht abwärtskompatibel zu bisherigen Versionen sein. Es wird zwar Konvertierungswerkzeuge geben, um von einem in das andere Format zu gelangen, damit ist aber leider nicht garantiert, dass die volle Funktionsfähigkeit erreicht wird. Dies liegt hauptsächlich an Änderungen an den Lucene Analyzern, so dass eine Reindizierung des gesamten Bestandes generell empfehlenswert ist. Das noch bei Version 2.x genutzte Verfahren, zuerst einen .9 Release zu veröffentlichen, der sich in der nächsthöheren Version ändernde Funktionalität durch deprecated-Marker ankündigt, entfällt, so dass die Migration des Codes eigener Implementierungen ebenso nötig sein wird.

 

Flexible Indexing

Am auffälligsten sind die Flexibilisierungen auf unterster Ebene, der Repräsentation eines Indexes. Dies nennen die Entwickler entsprechend auch “Flexible Indexing”. Mittels eigener Codecklassen wird es nun (einfacher als bisher) möglich sein, die Art und Weise, wie Indizes gespeichert werden, zu modifizieren – zum Beispiel, um neue Attribute zu speichern oder zusätzliche Informationen einzubinden oder einfach nur effizienter bestimmte Dinge zu erledigen.

 

Neue Methoden beim Information Retrieval

Nicht nur in Bezug auf Effizienz hat sich im Forschungsbereich des Information Retrieval einiges getan, so dass Lucene drohte, im Bereich der Indexrepräsentation den Anschluss zu verlieren. Durch die Flexibilisierung des Prozesses wurden nun schon einige Codecs entwickelt, die so sinnvoll sind und die Performanz dermaßen verbessern, dass sie voraussichtlich standardmäßig in Lucene Verwendung finden werden. Abgesehen davon wurden im Zuge dessen weitere Verbesserungen (z.B. FieldCache, IndexReader) vorgenommen, die zu erheblichen Arbeitsspeichereinsparungen und schnelleren Suchanfragen führen.

 

AutomatonQuery

Eine weitere Neuerung liegt in der so genannten AutomatonQuery. Bisher werden Suchanfragen teilweise recht umständlich beantwortet: Wenn sie mit bestimmten regulären Ausdrücken in Präfixposition versehen sind oder eine FuzzyQuery gestartet wird, musste ein Abgleich aller Terme mit der jeweiligen Suchanfrage vorgenommen werden, um herauszufinden, welche Terme auf die Anfrage passen. Für mit regulären Sprachen Vertraute gibt es eine naheliegende Lösung des Problems – und AutomatonQueries setzen genau dies um. Durch die Repräsentation von Suchanfragen als endliche Automaten (finite state automata, FSA) kann der Problematik in vielen Fällen Abhilfe geschafft werden. Technisch gelingt dies durch den Schnitt der Suchanfrageautomaten mit dem TermDictionary von Lucene, welches intern als Trie repräsentiert ist. Auch WildcardQueries lassen sich so schneller beantworten. Der Performanzvorteil steigt dabei umso mehr, je größer die Anzahl der Terme im Index ist.

Mit Lucene 4.0 wird eine weitere spannende Phase eingeleitet, die hoffentlich auch dazu beiträgt, neue Entwickler anzulocken, die nun insbesondere wegen der erweiterten Möglichkeiten bei Veränderungen von Indexformaten zu Lucene stoßen und neue Dinge mit Lucene anstellen und dem Projekt hinzufügen. Allein die Performanzverbesserungen machen Lucene 4.0 für alle Nutzer von Lucene interessant.

 

Weiterlesen

Hier noch einige Links für Interessierte:

http://www.slideshare.net/LucidImagination/fun-with-flexible-indexing-5898425 (mehr zu Codecs, Flexible Indexing, Zahlen zur Performanzverbesserung)

http://www.slideshare.net/otisg/finite-state-queries-in-lucene (mehr zu AutomatonQuery)

Open