In der Abfragesyntax Lucene Ich mag * kombinieren und ~ in einer gültigen Abfrage wie: bla ~ * // ungültige AbfrageLucene Abfrage: bla ~ * (Wörter, die mit etwas Fuzzy beginnen), wie?
Bedeutung: Bitte Worte übereinstimmen, die ähnlich mit „bla“ oder etwas anfangen, "bla".
aktualisieren: Was ich jetzt tun, arbeitet für kleinen Eingang, ist die folgende (Snippet SOLR Schema) verwenden:
<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
Falls Sie verwenden SOLR nicht, das macht folgendes.
Indextime: Indexdaten durch Erstellen eines Feldes, das alle Präfixe meiner (kurzen) Eingabe enthält.
Suchzeit: Verwenden Sie nur den Operator ~, da die Präfixe explizit im Index vorhanden sind.
Althoug Fuzzy-Suche funktioniert nicht auf einer bestimmte Anzahl von Zeichen, für meinen Fall einfach mit ~ nicht funktionieren (zu großem diff in char count). Ich möchte z.B. Sunla nach Sundlaugarvegur. –
natürlich, wenn ich Lucene nur auf die ersten x Zeichen jedes Wortes im Index übereinstimmen könnte, würde ~ funktionieren ... –
Sie müssten hier über Lucene gehen, verwenden Sie einen String-Vergleich Algorithmus wie Levenstein, Jaro -Winkler usw. (s. Unten) – Mikos