Bei Lucene handelt es sich um eine Programmbibliothek, die von der Apache Software Foundation veröffentlicht wird. Sie ist Open Source und für jeden kostenlos zu benutzen und zu verändern. Ursprünglich hat man Lucene komplett in Java geschrieben, inzwischen gibt es aber auch Portierungen in andere Programmiersprachen. Mit Apache Solr und Elasticsearch gibt es mächtige Erweiterungen, die der Suchfunktion noch mehr Möglichkeiten geben.
Lucene ist eine Volltextsuche. Das bedeutet ganz simpel gesprochen: Ein Programm durchsucht eine Reihe von Textdokumenten nach einem oder mehreren vom Nutzer bestimmten Begriffen. Darin erkennt man schon, dass Lucene gar nicht ausschließlich im Kontext des World Wide Webs Verwendung findet – auch wenn die Suchfunktionen hier omnipräsent sind. Auch für Archive, Bibliotheken oder sogar den heimischen Desktop-PC kann man Lucene einsetzen. Lucene durchsucht nämlich nicht nur HTML-Dokumente, sondern arbeitet z. B. auch mit E-Mail oder sogar PDF-Dateien.
Ausschlaggebend für die Suche ist ein Index – das Herz von Lucene: Hier sind alle Begriffe aller Dokumente gespeichert. Ein solcher Inverted Index ist prinzipiell nur eine Tabelle – zu jedem Begriff ist die entsprechende Position gespeichert. Damit man einen Index aufbauen kann, bedarf es zunächst einer Extrahierung. Alle Begriffe müssen aus allen Dokumenten gezogen und im Index gespeichert werden. Lucene gibt Nutzern die Möglichkeit, diese Extrahierung individuell zu konfigurieren. Entwickler entscheiden sich bei der Konfiguration, welche Felder sie in den Index aufnehmen möchten. Um dies zu verstehen, muss man einen Schritt zurückgehen.
Die Objekte, mit denen Lucene arbeitet, sind Dokumente in jeglicher Form. Die Dokumente selbst enthalten aber – aus der Sichtweise von Lucene gesprochen – Felder. In diesen stehen z. B. der Name der Autorin, der Titel des Dokuments oder der Dateiname des selbigen. Jedes Feld hat eine eindeutige Bezeichnung und einen Wert. So kann das Feld mit der Bezeichnung title etwa den Wert „Gebrauchsanweisung für Apache Lucene“ haben. Beim Erstellen des Indexes kann man sich also entscheiden, welche Metadaten man aufnehmen möchte.
Bei der Indizierung der Dokumente findet zudem eine sogenannte Tokenisierung statt. Für eine Maschine ist ein Dokument zunächst einmal eine Ansammlung von Informationen. Selbst wenn man sich von der Ebene der Bits löst und sich dem für Menschen lesbaren Inhalt zuwendet, besteht ein Dokument aus einer Aneinanderreihung von Zeichen: Buchstaben, Satzzeichen, Leerzeichen.
Aus dieser Datenmenge erzeugt man mit der Tokenisierung Segmente, die Begriffe (meistens einzelne Wörter), nach denen schließlich gesucht werden kann. Die einfachste Art, wie eine solche Tokenisierung ablaufen kann, funktioniert mit der White-Space-Methode: Ein Begriff endet dann, wenn ein Leerzeichen (ein weißer Zwischenraum) auftritt. Dies ist aber nicht zielführend, wenn feste Begriffe aus mehreren Wörtern bestehen, beispielsweise der „Heilige Abend“. Dafür kommen zusätzlich Wörterbücher zum Einsatz, die man auch in den Lucene-Code implementieren kann.
Bei der Analyse der Daten, von der die Tokenisierung ein Teil ist, führt Lucene zudem eine Normalisierung durch. Das heißt, die Begriffe werden in eine standardisierte Form gebracht, indem z. B. alle Großbuchstaben kleingeschrieben werden. Zudem schafft Lucene eine Sortierung. Diese funktioniert über verschiedene Algorithmen – z. B. über das TF-IDF-Maß. Als Nutzer möchte man wahrscheinlich die relevantesten oder neuesten Ergebnisse zuerst erhalten – die Algorithmen der Suchmaschine ermöglichen dies.
Damit Nutzer überhaupt etwas finden, müssen sie einen Suchbegriff in eine Textzeile eingeben. Den Begriff bzw. die Begriffe nennt man im Kontext von Lucene Query. Das englische Wort für Anfrage deutet an, dass die Eingabe eben nicht nur aus einem Wort oder mehreren bestehen muss, sondern auch Modifikatoren wie AND, OR oder auch + und - sowie Platzhalter enthalten kann. Der QueryParser – eine Klasse innerhalb der Programmbibliothek – übersetzt die Eingabe in einen konkreten Suchauftrag für die Suchmaschine. Auch beim QueryParser haben Entwickler Einstellungsmöglichkeiten. Den Parser kann man so konfigurieren, dass er genau auf die Bedürfnisse der Nutzer zugeschnitten ist.
Was Lucene bei Erscheinen komplett neu machte: die inkrementelle Indizierung. Vor Lucene war nur das sogenannte Batch-Indexing möglich. Während man damit nur komplette Indexe implementieren kann, lässt sich mit einer inkrementellen Indizierung ein Index aktualisieren. Einzelne Einträge können hinzugefügt oder entfernt werden.