Freie Suchmaschine für Unternehmen

21.03.2005
Von Thomas Nitsche
Lucene erfreut sich steigender Beliebtheit. Dies zeigt sich in mehreren Portierungen und ihrer Nutzung in diversen Produkten. Ihre Leistungsfähigkeit steht nicht hinter kommerzieller Software zurück.

Bei Lucene handelt es sich um ein Suchmaschinen-Framework. Ein solches gibt typischerweise lediglich die Grobarchitektur einer Applikation vor. Lucene verhält sich da nicht anders und stellt nur die Mittel für die Kernaufgaben zur Verfügung, Detailaspekte sind Sache der Entwickler und hängen vom Anwendungsszenario ab. Wie die Herkunft aus dem Umfeld von "Apache Jakarta" bereits erahnen lässt, ist Lucene komplett in Java geschrieben.

Die Kernaufgabe einer Lucene-Anwendung teilt sich in zwei Bereiche auf: Indexierung und Suche. Für die Indexierung stellt Lucene Klassen und Methoden bereit, um Dokumente zu analysieren, zu indexieren und zu speichern. Im Grunde kann alles verarbeitet werden, was in Textform vorliegt, also beispielsweise Ascii-Dateien, Datenbankfelder oder E-Mails. Wer Inhalte in Formaten wie HTML, PDF, Microsoft Word oder Open Office verarbeiten möchte, benötigt Filter, die textuelle Informationen extrahieren. Sie sind wegen der erwähnten Framework-Architektur jedoch nicht integraler Bestandteil von Lucene, sondern über diverse andere Projekte verfügbar ("PDFBox" für PDF, "JTidy" beziehungsweise "NekoHTML" für HTML, "Apache POI" für Microsoft Word etc.).

Wenn die eigentlichen Textinhalte vorliegen, werden sie einem so genannten Analyzer übergeben. Die Daten werden nach fest definierten Regeln zerlegt und in einer einheitlichen Weise für den Index aufbereitet. Dabei können Stoppwörter eliminiert oder Zeichenketten in Kleinschreibung normalisiert werden. Für einfache Aufgaben bringt Lucene einige "Simple Analyzer" mit. Für komplexere Analyseschritte wie die linguistische Aufbereitung des Textkörpers kann an dieser Stelle ein entsprechendes Tool eingeklinkt werden. Einen passenden Analyzer vorausgesetzt, lassen sich mit Lucene übrigens auch hierzulande ungewohnte Zeichensätze, wie sie im Chinesischen oder Japanischen üblich sind, hervorragend indexieren.

Nach der Analyse erfolgen die eigentliche Indexierung und das Abspeichern des aufbereiteten Suchraums. Spätestens zu diesem Zeitpunkt sollte man wissen, welche Informationen auf welche Weise im Index abge- legt werden. Lucene unterscheidet die Indexfelder "indexed", "tokenized" und "stored". Diese Attribute, die sich auch kombinieren lassen, geben an, ob ein Feld durchsuchbar (indexed) sein soll, ob der Eingabestream durch einen Analyzer normalisiert (tokenized) wird und schlussendlich, ob das Feld in seiner Originalform im Index abgespeichert (stored) werden soll.

Unterstützung für mehrere Suchtypen

Nach Abschluss der Indexierung ist die Suchfunktion einsatzbereit. Lucene kennt Term- und Phrasensuche, Boolesche Operatoren, Wildcard-Suche, Range-Queries sowie Fuzzy- und Proximity-Suche. Auch auf dieser Ebene stützt sich Lucene auf ein mehrschichtiges Modell. Bevor der eigentliche Suchvorgang stattfindet, muss die Anfrage erst in ein abstraktes Anfrageobjekt überführt werden. Diese Aufgabe lässt sich entweder über ein Such-API erledigen oder alternativ über einen Query-Parser. Der zweite Ansatz erlaubt es, eine eigene Anfragesyntax zu implementieren. Der integrierte Query Parser lehnt sich mit seiner Syntax stark an Googles Anfragesprache an. Das erzeugte Anfrageobjekt wird anschließend an einen Index-Searcher übergeben, der die Suche im technischen Sinne betreibt. Zur Präsentation der Ergebnisse, beispielsweise auf einer Web-Seite oder in einer Desktop-Applikation, kann man über eine Klasse namens "Hits" auf die Treffer zugreifen. Aus Performance-Gründen holt eine Hits-Instanz nicht alle Treffer aus dem Index, sondern nur eine begrenzte Anzahl der besten Ergebnisse. Über Low-Level-Methoden können eigene Scoring- und Sortier-Algorithmen implementiert werden. Allerdings müssen diese auch beim Indexieren berücksichtigt werden.

Anwendungen belegen Interesse an Lucene

Die Popularität von Lucene spiegelt sich in vielen existierenden Anwendungen wider. Im Web beispielsweise liefert Lucene die Suchinfrastruktur für die Blog-Suchmaschine Technorati. Die Social-Bookmark-Dienste Simpy und Furl verwenden es zur Recherche in den abgespeicherten Einträgen. Und im deutschsprachigen Wissensdienst xipolis.net wurde die Suche in den derzeit etwa 1,7 Millionen Lexikon- und Wörterbuchartikeln ebenfalls mit Lucene realisiert.

Am Desktop dürfte die freie Entwicklungsumgebung "Eclipse" wohl die bekannteste Anwendung für die Suchmaschine sein. Dort hilft Lucene beim Recherchieren in der Dokumentation und der Online-Hilfe. Sogar Microsoft ist nolens volens zu einem Lucene-Anwender geworden: durch den Zukauf der Software Lookout, einer Desktop-Suche für Outlook, wurden die Redmonder zu Anwendern dieser Open-Source-Software.

Zahlreiche Portierungen der Suchmaschine

Ein weiterer Anhaltspunkt für die wachsende Popularität sind die zahlreichen Portierungen in andere Programmiersprachen. Nennenswerte Lucene-Adaptionen existieren für Perl (Plucene), Python (Lupy/PyLucene), C (Lucene4c), C++ (CLucene) sowie für .NET (dotLucene). Allerdings muss erwähnt werden, dass manche dieser Implementierungen zum Teil inkompatibel zur originalen Java-Version sind, insbesondere was den Index anbelangt. Wer also plant, eine gemischte Suchanwendung zu entwerfen, bei der beispielsweise Lucene4c die Indexierung übernimmt und Lucene den Anfragepart, sollte darauf achten, dass die jeweiligen Versionen zusammenpassen. Diese Portierungen sind keine bloßen Spielereien begabter Entwickler, sondern Bestandteil namhafter Softwareprodukte. So verwendet zum Beispiel die populäre Blogging-Software "Movable Type" von Six Apart Plucene als Such-Plugin. Und für Linux entwickelt die Gnome-Gemeinde gerade eine Desktop-Suche auf Basis von DotLucene und der freien .NET-Implementierung Mono.

Lucene steht wie nahezu alle Projekte der Apache Foundation unter der hauseigenen Apache Software License. Dieser Lizenztyp gilt als geschäftsfreundlich, weil er Entwickler nicht dazu zwingt, ihre Software als Open Source zu publizieren, wenn sie Apache-Komponenten verwendet. Dieser Unterschied zur restriktiveren "GNU Public License" (GPL) kann gerade für Softwarehäuser ein wichtiger Punkt sein, wenn sie planen, Lucene in eigene Applikationen zu integrieren. (ws)