2016-04-27 23 views
0

In Lucene kann ich Fuzzy-Suche verwenden, um "ähnliche" Ergebnisse zu erhalten.Lucene Fuzzy-Suche auf den gesamten Text

Zum Beispiel Abfrage folgende:

text:awesome~0.8 

Werden die Dokumente mit 80% ähnliche Texte, wie 'awesom' gefunden.

Meine Frage ist, kann ich Fuzzy-Suche für den gesamten Text (mehrere Wörter) verwenden?

Zum Beispiel möchte ich folgenden Text 80% Ähnliche Texte, um herauszufinden:

das ist mein Text mit mehreren Worten

Putting Fuzzy-Klausel für jedes Wort würde mich nicht geben gewünscht Ergebnisse:

text:(+this~0.8 +is~0.8 +my~0.8 +text~0.8 +with~0.8 +multiple~0.8 +words~0.8) 

Da es nur die Dokumente zurückgeben würde, die alle Wörter (oder 80% ähnliche Worte gegen jedes Wort) in Abfrage angegeben hat.

ich Abfrage erwarten, dass ich zurückkehren führt, wo gesamte String 80% ähnlich ist (auch wenn es nicht ein ganzes Wort hat), zum Beispiel:

dieser Text mit mehreren Wörtern ist

Etwas Ähnliches -

text:(+this +is +my +text +with +multiple +words)~0.8 

Offensichtlich obige Abfrage gibt Syntaxfehler, aber ich brauche die Ergebnisse auf gesamten Text/Phrase basiert auf Ähnlichkeit zu erhalten.

Ich bin glücklich, Java-API-Klassen für diesen Zweck zu verwenden, da ich es in einem Java-Programm verwenden muss.

Antwort

0

Ich bin nicht sicher, dass floating Ähnlichkeit für Fuzzy-Abfrage in Lucene mehr erlaubt ist. Ab Version Lucene 4.0 und höher unterstützt FuzzyQuery maximal 2 Bearbeitungsdistanzen.

Angenommen, Sie möchten die Entfernung von 2 bearbeiten. Sie können den Keyword Analyzer beim Indexieren Ihres Felds verwenden. Dadurch werden Ihre Feldwerte nicht in Tokens umgewandelt. Während der Suche können Sie FuzzyQuery mit einem Begriff verwenden, der Volltext enthält.

Einschränkungen dieser Lösung:

  • Maximale Editierdistanz ist 2.
  • Wir gehen davon aus, dass, was auch immer Sie suchen, bis ein voller Wert dieses Feldes. Wenn Sie zum Beispiel den Wert "this is my text" angegeben haben, können Sie die Datei nicht erhalten, wenn Sie mit "Dies ist ny" [in der Abfrage einen Fehler gemacht] suchen. Sie können dieses Dokument erhalten, wenn Sie es als "das ist ny Text" abfragen.