Die Standard-Suchsyntax von Lucene


[ Seminar "Java und Werkzeuge für das Web" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ weiter ] ... [ Links und Literaturverzeichnis ] [ eMail an den Autor ]

Übersicht: Die Standard-Suchsyntax von Lucene


Überblick

Lucene unterstützt standardmäßig reichhaltige Suchoptionen.
Allerdings besteht auch die Möglichkeit, eine eigene Suchsyntax zu entwickeln.

Ausdrücke

Eine Suchanfrage wird in Ausdrücke und Operatoren unterteilt.
Ein einzelner Ausdruck ist ein Wort wie z. B. "Hallo".
Eine Phrase ist eine Gruppe von Wörtern, von Anführungszeichen umschlossen, wie "Hallo Du".
Mehrere Ausdrücke können mit Hilfe boolescher Operatoren verbunden werden.

Felder

Lucene unterstützt Felddaten (z. B. Dokumenttitel und Inhalt). Bei einer Suchanfrage kann man entweder ein Feld spezifizieren oder man benutzt das Standardeld. Die Feldnamen sind implementationsspezifisch.

Um in einem bestimmten Feld zu suchen, kann man den Feldnamen, gefolgt von einem Doppelpunkt und dem Suchausdruck angeben. Ein Beispiel:
"title:index AND text:hallo".
Ist "text" das Standardfeld, kann man auch
"title:index AND hallo"
eingeben.

Beachte: Das Feld gilt nur für den direkt folgenden Ausdruck, bei
"title:Titel Nummer 1"
gilt das Feld " title" nur für das Wort " Titel".

Wildcards

Lucene erlaubt Wildcard-Suche für ein oder mehrere Zeichen.

Um einen Platzhalter für ein einzelnes Zeichen anzugeben, wird ein "?" benutzt.
te?t
würde nach allen Wörtern wie "test" oder "text" suchen.

Um ein Platzhalter für mehrere Zeichen anzugeben, wird ein "*" benutzt.
test*
würde nach allen Wörtern wie "test" oder "tester" suchen.

Beachte: Beide Wildcards können sowohl innerhalb, als auch am Ende der Ausdrucks stehen, nicht jedoch am Beginn.

Fuzzy-Suche (undeutliche Suche)

Lucene unterstützt undeutliche Suche (Levenshtein Distanz Algorithmus).

Um eine undeutliche Suche zu formulieren, benutzt man das Tilde-Symbol ("~") am Ende eines einzelnen Wortes.
lachen~
würde Wörter wie "lachen", "wachen" oder auch "Laschen" finden.

Beachte: Ausdrücke, die über die Fuzzy-Suche gefunden wurden, werden automatisch mit einem Verstärkungsfaktor von 0,2 gewichtet.

Distanzsuche

Lucene erlaubt das Suchen von Wörtern, die eine bestimmte maximale Distanz voneinander entfernt sind.

Um eine Distanzsuche zu formulieren, muss das Tilde-Symbol ("~"), gefolgt von der Anzahl der Wörter, die diese maximal voneinander entfernt sein dürfen, hinter dem Audruck angegeben werden.
"Guten wiedersehen"~10
würde nach den Wörtern "Guten" und "wiedersehen" suchen, die höchstens 10 Wörter voneinander entfernt liegen dürfen.

Verstärkungsfaktoren

Lucene erlaubt es, einen Ausdruck mit einem Verstärkungsfaktor zu versehen, was sich dann auf die Reihenfolge der Ergebnisse auswirkt.

Um einem Ausdruck ein Verstärkungsfaktor zuzuordnen, wird das "^"-Symbol, gefolgt von dem Verstärkungsfaktor hinter dem Ausdruck angegeben.
hallo^4 du
würde bedeuten, dass Ergebnisse, die das Wort "hallo" enthalten, viermal so stark gewichtet werden, wie solche, die das Wort "du" enthalten.

Auch Phrasen (Ausdrücke, die aus mehreren Wörtern bestehen) können mit einem Verstärkungsfaktor versehen werden.
Der Standardfaktor ist 1.
Verstärkungsfaktoren müssen immer positiv sein, sie können aber kleiner als 1 sein.

Boolesche Operatoren

Es können boolesche Operatoren, wie und, oder, usw. angegeben werden, um die Suche zu spezifizieren.

Sollen zwei Ausdrücke ODER-verknüpft werden, so ist dazwischen ein "OR" zu schreiben, oder aber gar nichts, da die ODER- die Standardverknüpfung ist.
hallo OR du
oder aber hallo du

Sollen zwei Ausdrücke UND-verknüpft werden, so ist dazwischen ein "AND", oder aber vor beide Ausdrücke ein "+"-Zeichen zu schreiben.
hallo AND du
oder aber
+hallo +du

Soll z. B. das Wort "hallo" unbedingt vorkommen, das Wort "du" aber nicht unbedingt, so ist
+hallo du
zu schreiben.

Es können auch negierende boolesche Operatoren angegeben werden.

Um anzugeben, dass ein Ausdruck nicht vorkommen soll, ist ein NOT, oder aber ein Minuszeichen ("-") vor dem Ausdruck zu schreiben.
hallo NOT du
bedeutet, dass "hallo", nicht aber "du" vorkommen soll.

Beachte: der NOT-Operator kann nicht nur mit einem Ausdruck benutzt werden, wie bei
NOT "hallo du"

Gruppierung von Elementen

Elemente können gruppiert werden.

Dazu werden Klammern mit den üblichen Regeln benutzt:
(hallo OR du) AND ich
sucht alle Dokumente, in denen "ich" vorkommt, sowie "hallo" oder "du".

Syntaxzeichen ausschließen

Auch Zeichen, die für die Suchsyntax reserviert werden, können in der Suche mit angegeben werden.

Ein Backslash ("\") vor einem solchen Zeichen bewirkt, dass es nicht fü die Syntax interpretiert, sondern in den Suchwausdruck einbezogen wird:
\(1\+1\)\:2
bedeutet, dass genau nach "(1+1):2" gesucht werden soll.

[ Seminar "Java und Werkzeuge für das Web" ] ... [ Inhaltsverzeichnis ] ... [ zurück ] ... [ oben ] ... [ weiter ] ... [ Links und Literaturverzeichnis ] [ eMail an den Autor ]