Unscharfe Suche (Fuzzy-Suche)
Wenn Sie auch nach Wörtern suchen möchten, die nicht exakt mit dem Suchbegriff übereinstimmen, können Sie die unscharfe Suche (Fuzzy-Suche) verwenden. Dies ist beispielsweise bei Tippfehlern, abweichender Schreibweise oder Rechtschreibvarianten hilfreich. Die unscharfe Suche ist eine Suchmethode, bei der ein Wort als Treffer gilt, wenn der Unterschied (die Editierdistanz) zwischen dem Suchbegriff und einem im Index registrierten Wort innerhalb eines bestimmten Bereichs liegt. Die Editierdistanz ist die minimale Anzahl an Einfügungen, Löschungen und Ersetzungen von Zeichen, die notwendig sind, um ein Wort in ein anderes umzuwandeln. Fess verwendet standardmäßig zusätzlich zu diesen Operationen die Damerau-Levenshtein-Distanz (optimal string alignment), bei der auch das Vertauschen von 2 benachbarten Zeichen als eine einzelne Änderung gezählt wird.
Verwendung
Fügen Sie „~“ nach dem Suchbegriff an, auf den Sie die unscharfe Suche anwenden möchten.
Wenn Sie beispielsweise das Wort „fess“ unscharf suchen möchten, können Sie durch Eingabe des Folgenden in das Suchformular Dokumente finden, die Wörter enthalten, die „fess“ ähnlich sind (z. B. „fes“).
Wenn Sie nach „~“ eine Zahl anfügen, können Sie die zulässige Editierdistanz (bis zu wie vielen Zeichen Unterschied toleriert wird) angeben. Zulässige Werte sind die ganzen Zahlen 0, 1 oder 2.
Im obigen Beispiel werden Wörter gesucht, deren Editierdistanz zu „fess“ höchstens 1 beträgt.
Wenn Sie die Zahl weglassen und nur „~“ angeben, wird eine Editierdistanz von 2 verwendet. Der Höchstwert der Editierdistanz ist 2; auch wenn ein Wert von 3 oder mehr angegeben wird, wird er als 2 behandelt.
Sie können die unscharfe Suche auch auf ein bestimmtes Feld anwenden. Im folgenden Beispiel werden im Feld title Dokumente gesucht, die Wörter enthalten, die „fess“ ähnlich sind.
Wenn kein Feld angegeben wird, erfolgt die unscharfe Suche in den Feldern title und content.
Nutzungsbedingungen
Beachten Sie bei der Verwendung der unscharfen Suche die folgenden Punkte:
Die unscharfe Suche wird auf einzelne Wörter angewendet. Sie kann nicht auf Phrasen angewendet werden, die in Anführungszeichen eingeschlossen sind. Eine Zahl, die einer Phrase angehängt wird (zum Beispiel
"Fess Search"~2), stellt dabei keine unscharfe Suche dar, sondern eine Näherungssuche (proximity search), die den Abstand zwischen den Wörtern angibt.Die unscharfe Suche erfolgt auf Basis der im Index registrierten Wörter, wobei der Suchbegriff nicht erneut analysiert wird. Daher funktioniert sie möglicherweise nicht wie erwartet bei Texten wie Japanisch, die per Bi-Gramm oder morphologischer Analyse in Token zerlegt werden. Die unscharfe Suche ist vor allem bei alphanumerischen Wörtern wirksam.
Der Suchbegriff der unscharfen Suche wird einschließlich Groß- und Kleinschreibung unverändert für die Editierdistanz herangezogen. Englische Wörter werden im Index normalerweise in Kleinbuchstaben umgewandelt gespeichert; verwenden Sie daher für den Suchbegriff Kleinbuchstaben. Zum Beispiel verbraucht
Fess~1die Editierdistanz 1 bereits allein durch den GroßbuchstabenFam Anfang und liefert daher nicht dasselbe Ergebnis wiefess~1. Außerdem trifftFess~0auf nichts zu, da im Index kein WortFessmit Großbuchstaben existiert (das kleingeschriebenefess~0ist eine exakte Übereinstimmung).Wenn Sie an sehr kurze Wörter mit 1 bis 2 Zeichen „~“ (Editierdistanz 2) anhängen, werden auch Wörter gefunden, bei denen nur ungefähr so viele Zeichen ersetzt wurden, wie das Wort lang ist. Zum Beispiel trifft
ab~nebenabundacauch aufxyzu, bei dem sich beide Zeichen unterscheiden. Da dadurch mehr unerwünschte Treffer entstehen, geben Sie bei kurzen Wörtern eine kleinere Editierdistanz an, etwaab~1.
Bemerkung
Das Verhalten der unscharfen Suche kann in fess_config.properties angepasst werden.
query.fuzzy.prefix_length(Standardwert:0): Die Anzahl der Zeichen vom Anfang des Wortes an, die exakt übereinstimmen müssen. Ein höherer Wert schränkt den Bereich ein, in dem Abweichungen toleriert werden.query.fuzzy.expansions(Standardwert:50): Die maximale Anzahl der Wörter, die als Treffer-Kandidaten expandiert werden.query.fuzzy.transpositions(Standardwert:true): Legt fest, ob das Vertauschen von 2 benachbarten Zeichen als eine einzelne Änderung gezählt wird. Beitruewird die Damerau-Levenshtein-Distanz verwendet, beifalsedie klassische Levenshtein-Distanz.
Bemerkung
Auch bei einer normalen Suche ohne angehängtes „~“ fügt Fess für Suchbegriffe ab einer bestimmten Länge (standardmäßig ab 4 Zeichen) automatisch eine leicht gewichtete unscharfe Übereinstimmung als unterstützende Funktion hinzu, um die Relevanz zu erhöhen (query.boost.fuzzy.*). Dies dient hauptsächlich der Anpassung der Rangfolge der Suchergebnisse und ist ein von der unscharfen Suche mittels „~“ unabhängiger Mechanismus. Da diese unterstützende Übereinstimmung jedoch ebenfalls in die Suchergebnisse einfließt, können Dokumente zum Ergebnis hinzukommen, die den Suchbegriff selbst nicht enthalten, sondern nur ein Wort, das sich um ein Zeichen unterscheidet (Dokumente, die den Suchbegriff selbst enthalten, werden höher eingestuft). Wenn Sie dieses Verhalten abschalten möchten, setzen Sie query.boost.fuzzy.min.length auf einen negativen Wert (z. B. -1).