#

Lucene

Lucene ist eine API zur volltextindizierung von Dokumenten und damit einer der vielen Schätze der Open Source Gemeinde, zu finden bei Apache.org.
Während der Markt für Volltextindizierung hauptsächlich kommerzielle Produkte im Enterprisebereich und diverse freie Desktopsuchen anbietet, ermöglicht die Open Source API von Lucene Java Entwicklern freien Zugang zu solchen Funktionalitäten, sei es, um diese in eigenen Anwendungen zu nutzen, oder einfach um eine eigene Archivdatenbank zu erstellen.

Aus Spaß habe ich einfach mal die Release Version runtergeladen und, damit das ganze erst Sinn macht, die zusätzliche Open Source API PDFBox heruntergeladen, welche das Lesen von PDF Dokumenten unter Java ermöglicht und eingebauten Support für Lucene hat.
Mit den enthaltenen Beispiel Klassen kann man dann auch schon loslegen:

org.pdfbox.searchengine.lucene.IndexFiles -create -index ./index E:/information

und voila: Meine Sammlung von 136 PDF und Textdokumenten auf dem USB Stick wurde in zweieinhalb Minuten indiziert.
Der Index ist eine einfache Dateie, die systemübergreifend kopiert und benutzt werden kann. Es gibt aber auch parallele Projekte mit Support für das Ablegen des Index in einer Datenbank.

Die Abfragen über eine entsprechende Klasse liefert sehr schnell die entsprechenden Trefferlisten.

Zum Personalisieren von Lucene stehen einige einfache Strukturen zur Verfügung, mit denen man auch andere Dokumententypen in für Lucene verständliche Formate überführen kann. Dazu gehört auch die API Lius, mit der XML, HTML, PDF, Word, Excel, PowerPoint, RTF, TXT, OpenOffice und JavaBeans indiziert werden können. Alles über Adapter zu weiteren Open Source Projekten, wie etwa Apaches POI für Mircoshafts Officedokumente.

Dabei wird jedes Dokument in Textform an Lucene weitergereicht und durch einen Analyser Wort für Wort verarbeitet. Der Standard Analyser in Lucene filtert dabei redundante Wörter, wie „the“, „a“ etc. und Satzzeichen heraus. Durch das Erben von dieser Klasse können eigene Implementierungen erstellt werden. Eine weitere Klasse dient als Wrapper für verschiedene Dokumenttypen und kapselt das Extrahieren von Textinformationen aus dem entsprechenden Dateiformat. Intern liest eine solche Klasse die Datei und stellt der Lucene Document Klasse den eigentlichen Textinhalt sowie Metadaten (Keywords, Author etc.) zur Verfügung.

Auf einer Chinesischen Seite konnte ich sogar einen MP3 Tagindexer für Lucene finden, welcher aus MP3 Dateien die Taginformationen liest und somit für Lucene zur Verfügung stellt.

Durch weitere Wrapper können natürlich auch ZIP und andere Archive geöffnet, und die enthaltenen Dokumente indiziert werden.
Mit Java Advanced Imaging könnte man sogar Bilder und ihre Metainformationen (Größe, Farbzahl etc.) indizieren.

Alles in Allem ist Lucene eine sehr gute API um seine eigene Dokumentenverwaltung zu schreiben und hat auch schon den Weg in einige Desktopsearch und Open Source CMS Anwendungen geschafft, ganz zu schweigen von etlichen Webseiten, die ihre Inhalte mit Lucene indizieren.

Links:

  • Lucene Mini Tutorial
  • „Introduction to Text Indexing with Apache Jakarta Lucene“ Artikel auf onjava.com
  • „The Lucene Search Engine – Adding search to your applications“ Artikel auf javaranch.com
  • Autofocus – Ein visuelles Desktopsearch Werkzeug, mit freier Personal-Use Lizenz
  • FastFind – Desktop Search mit regulären Ausdrücken zum Suchen.
  • Tags:,

    Leave a Reply »»

    Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.