Lucene Hilfe Begriffe Eine Abfrage (Query) ist in Begriffe und Operatoren unterteilt. Es gibt zwei verschiedene Arten von Begriffen: einzelne Begriffe und Phrasen. Ein einzelner Begriff ist ein einzelnes Wort wie z.b. test oder hallo Eine Phrase ist eine von Anführungszeichen begrenzte Gruppe von Wörtern, beispielsweise Guten Tag. Für komplexere Abfragen können mehrere Begriffe mit booleschen Operatoren kombiniert werden. (vgl. unten) Felder Lucene unterstützt Felddaten. Für eine Abfrage kann man entweder ein Feld spezifizieren oder das Standardfeld benutzen. Die Feldnamen sowie das Standardfeld sind implementierungsspezifisch. Für jedes Feld kann eine Suche formuliert werden, indem man den Feldnamen gefolgt von einem Doppelpunkt und dem Suchbegriff eingibt. Stellen wir uns einen Lucene-Index vor, der die zwei Felder title und text besitzt, wobei text als Standardfeld dient. Will man nach dem Dokument mit dem Titel der richtige Weg suchen, das den Text abbiegen enthält, gibt man title: der richtige Weg AND text:abbiegen oder title: der richtige Weg AND abbiegen ein. Da text das Standardfeld ist, muss der Feldname nicht angegeben werden. Achtung: der Feldname ist nur für den unmittelbar darauffolgenden Begriff gültig. Mit der Abfrage title:der richtige Weg würde also nur der Begriff der im Feld title gesucht. Nach den Begriffen richtige und Weg würde hingegen im Standardfeld gesucht werden. (in unserem Beispiel im Feld text )
Modifikation von Suchbegriffen Durch die Modifikation von Suchbegriffen bietet Lucene eine breite Palette von Suchoptionen an. Wildcard-Suche Lucene unterstützt die Wildcard-Suche für ein oder mehrere Zeichen. Als Platzhalter für ein einzelnes Zeichen dient das Symbol?. Der Platzhalter für mehrere Zeichen ist das Symbol *. Ersetzt man für eine Abfrage ein einzelnes Zeichen durch den Platzhalter?, wird nach Begriffen gesucht, die mit Ausnahme des Platzhalters mit dem Suchbegriff identisch sind. Um beispielsweise nach den Wörtern test oder text zu suchen, wird der Suchbegriff te?t verwendet. Der Platzhalter für mehrere Zeichen ersetzt 0 oder beliebig viele Zeichen. Sucht man zum Beispiel nach den Wörtern test, tests oder testpersonen, benutzt man den Suchbegriff test* Platzhalter können auch im Innern eines Begriffs verwendet werden: te*t Achtung: Ein Platzhalter darf niemals als erstes Zeichen des Suchstrings verwendet werden.
Fuzzy-Suche (undeutliche Suche) Lucene unterstützt die undeutliche Suche, basierend auf dem Levenshtein-Distanz Algorithmus (auch Edit-Distanz Algorithmus genannt). Eine undeutliche Suche wird formuliert, indem man das Tilde-Symbol ~ am Ende eines einzelnen Wortes anhängt. Um beispielsweise Wörter zu finden, die in ihrer Schreibart dem Wort Kuchen ähneln, benutzt man die undeutliche Suche Kuchen~ Das Resultat dieser Suche würde Wörter wie Suchen und Buche beinhalten. Ab Version 1.9 kann ein zusätzlicher (optionaler) Parameter angegeben werden, der den Ähnlichkeitsfaktor bestimmt. Der Wertebereich dieses Parameters liegt zwischen 0 und 1, wobei ein höherer Wert eine grössere Ähnlichkeit von Suchbegriff und gefundenem Wert verlangt. Das vorige Beispiel könnte also wie folgt erweitert werden: Kuchen~0.8 Wird dieser Parameter nicht angegeben, verwendet Lucene den Standardwert 0.5. Distanzsuche Lucene erlaubt die Suche nach Wörtern, zwischen denen eine bestimmte maximale Distanz liegen darf. Für eine Distanzsuche wird am Ende einer Phrase das Tilde- Symbol ~ angehängt. Um in einem Dokument nach den Wörtern Apache und Jakarta zu suchen, die höchstens 10 Wörter voneinander entfernt liegen dürfen, formuliert man die Suche Apache Jakarta ~10 Bereichssuche Bereichssuchen erlauben es, Treffer in Dokumenten zu landen, deren Feldwert(e) zwischen einem minimalen und einem maximalen Wert liegen. Bereichssuchen können einschliessend oder ausschliessend formuliert sein. Die Sortierung erfolgt lexikografisch. erstelldatum:[20060610 TO 20060710] Über diese Suche findet man die Dokumente, deren Feld erstelldatum einen Wert aufweist, der im angegebenen Datumsbereich (inklusive Start- und Enddatum) liegt. Eine Bereichssuche ist nicht auf Datumsfelder beschränkt. Man kann sie auch für Felder anderen Datentyps formulieren. title:{aida TO Carmen}
Diese Abfrage hätte als Resultat alle Dokumente, deren Titel zwischen Aida und Carmen liegen, diesen jedoch nicht entsprechen. Einschliessende Bereichssuchen werden in eckigen Klammern angegeben. Für ausschliessende Bereichssuchen werden geschweifte Klammern verwendet. Gewichtungsfaktoren Aufgrund der gefundenen Begriffe erstellt Lucene einen Relevanzindex. Um einem Begriff in einer Abfrage grösseres Gewicht zu verleihen, verwendet man das Caret- Zeichen ^ zusammen mit dem Gewichtungsfaktor als numerischem Wert am Ende des Suchbegriffs. Je höher der angegebene Wert, desto relevanter wird der Begriff für die Abfrage. Gewichtungsfaktoren erlauben es, Dokumenten ein grösseres Gewicht beizumessen, in denen der stärker gewichtete Begriff gefunden wird. Will man für die Suche jakarta apache dem Begriff jakarta eine höhere Relevanz beimessen, fügt man das Caret-Zeichen mit dem numerischen Gewichtungsfaktor am Ende des Wortes an. Für die resultierende Suche jakarta^4 apache würden Dokumente, die das Wort jakarta enthalten, als relevanter angesehen werden. Auch Phrasen können mit einem Gewichtungsfaktor versehen werden: jakarta apache ^4 apache lucene Der Standardwert für den Gewichtungsfaktor ist 1. Gewichtungsfaktoren müssen einen positiven Wert besitzen, der jedoch kleiner 1 sein darf. (beispielsweise 0.2) Boolesche Operatoren Mit booleschen Operatoren können Begriffe durch logische Operatoren verbunden werden. Lucene kennt die booleschen Operatoren AND, +, OR, NOT und -. (Achtung: Boolesche Operatoren müssen in Grossbuchstaben angegeben werden). OR Der ODER-Operator (OR) ist der von Lucene standardmässig verwendete logische Operator. Wenn zwischen zwei Suchbegriffen kein Operator angegeben ist, verwendet Lucene den ODER-Operator. Der ODER-Operator verknüpft zwei Begriffe und sucht Dokumente, in denen einer der beiden verknüpften Begriffe vorkommt. Dies entspricht der Bildung einer Vereinigungsmenge. Anstelle des Wortes OR kann auch das Symbol verwendet werden. Dokumente, die entweder die Phrase jakarta apache oder lediglich jakarta einhalten, findet man über den Suchstring jakarta apache jakarta
oder jakarta apache OR jakarta AND Der UND-Operator (AND) sucht Dokumente, in denen beide Suchbegriffe im Text vorkommen. Dies entspricht der Schnittmengenbildung. Anstelle des Wortes AND kann auch das Symbol && verwendet werden. jakarta apache AND Apache Lucene findet nur Dokumente, in denen beide Phrasen jakarta apache und Apache Lucene vorkommen. + (Plus) Der Operator + legt fest, dass der auf den Operator folgende Begriff zwingend im Dokument vorkommen muss. Die Suche nach Dokumenten, die jakarta enthalten müssen und eventuell lucene beinhalten, verwendet man die Abfrage +jakarta lucene NOT Der NICHT-Operator (NOT) schliesst Dokumente aus dem Ergebnis aus, die den unmittelbar auf den Operator folgenden Begriff beinhalten. Dies entspricht der Bildung einer Komplementärmenge. Statt des Wortes NOT kann auch das Symbol! verwendet werden. Mit der Abfrage jakarta apache NOT Apache Lucene werden Dokumente gefunden, die jakarta apache enthalten, in denen Apache Lucene jedoch nicht vorkommen darf. Achtung: Der NICHT-Operator kann nur bei der Verknüpfung von mehreren Begriffen verwendet werden. Die folgende Abfrage würde eine leere Ergebnismenge liefern: NOT jakarta apache - (Minus) Der Ausschlussoperator, repräsentiert durch das Symbol -, schliesst Dokumente aus, die den unmittelbar auf den Operator folgenden Begriff enthalten.
Mit der Suche jakarta apache Apache Lucene findet man Dokumente, die jakarta apache enthalten, in denen die Phrase Apache Lucene jedoch nicht vorkommt. Gruppierung Lucene bietet die Möglichkeit, Unterabfragen zu erzeugen, indem man Abfragebedingungen mit runden Klammern gruppiert. Auf diese Weise kann die boolesche Logik besser kontrolliert werden. Mit (jakarta OR apache) AND website sucht man entweder nach jakarta oder apache und website. Dieser Suchstring lässt keine Fragen offen. Er verlangt, dass der Begriff website vorhanden ist und zusätzlich einer der beiden Begriffe jakarta und apache vorkommt. Gruppierung von Feldern Lucene erlaubt, verschiedene Abfragebedingungen für ein einzelnes Feld mit runden Klammern zu gruppieren. Folgende Abfrage sucht nach Dokumenten, in deren Feld title der Begriff Panther sowie die Phrase der rosarote vorhanden sind: title:(+panther + der rosarote ) Escape-Sequenzen für Sonderzeichen Lucene unterstützt Escape-Sequenzen um Sonderzeichen darzustellen, die Teil der Abfragesyntax sind. Hier die komplette Liste der gegenwärtig vorhandenen Sonderzeichen: + - &&! ( ) { } [ ] ^ " ~ *? : \ Um eine Escape-Sequenz für eines dieser Sonderzeichen zu erstellen, wird diesem ein Backslash \ vorangestellt. Der Ausdruck (1+1):2 wird demnach wie folgt formuliert: \(1\+1\)\:2