Dies erfordert ein wenig Erklärung, aber ich denke, diese Diskussion könnte jedem mit wichtigen Phrasen in ihrem Solr-Index helfen.Sortierung der Rechtschreibprüfung Ergebnisse in Solr
Ich verwende Solr zur Suche in einem E-Commerce-Kontext, und ich versuche, Rechtschreibprüfung Vorschläge für Markennamen zu verbessern. Standardmäßig überprüft Solr jedes Wort einzeln, ohne Rücksicht darauf, ob die resultierende Phrase Sinn ergibt. Zum Beispiel bringt eine Suche nach "paula dean" zurück "Meintest du: Paula Bohne?", Während der Markenname tatsächlich "Paula Deen" ist. Zur Zeit ist mein Wörterbuch für Rechtschreibprüfung ein whitespace-Token-Feld namens spellField. Um vollständige Markennamen für die Rechtschreibprüfung zu indizieren, ersetze ich meinen Solr-Import Whitespace in Markennamen aus meiner Datenbank mit Unterstrichen, d. H. Entree Casual Dining -> Entree_Casual_Dining. Hier ist das Schema für den Feldtyp von spellField:
<fieldType name="spellcheckquery" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)|(^[0-9]+$)" replacement="" replace="all"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)|(^[0-9]+$)" replacement="" replace="all"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="4" outputUnigrams="true"/>
</analyzer>
</fieldType>
Unterstreicht in dem Markennamen Putting war der beste Weg, ich denken konnte, Mehrwortmarkennamen als einziges Token in einem Leerzeichen Token versehen Feld zu halten. Ich kann den zurückgegebenen Rechtschreibvorschlag von Unterstreichungen leicht entfernen, nachdem er zurückkommt. So, jetzt, wenn eine Abfrage hereinkommt, schichtet Solr die Abfrage und sucht nach einem Rechtschreibvorschlag für jeden Schindel, dh Suche nach der Marke mit einem Rechtschreibfehler: "entre casual dining" -> "entre", "casual", " Dining "," Entre lässig "," Casual Dining "," Entre Casual Dining ". Die Schindel "entre casual dining" ist ähnlich wie im Index ("Entree_Casual_Dining"), daher kommt "entree_casual_dining" als Vorschlag zurück. Groß.
Angenommen, die Abfrage enthält einen Markennamen und eine Art von Produkt, wie "Entre Casual Esstisch gesetzt." Wir möchten die Rechtschreibkorrektur für den Markennamen finden und die gesamte falsch geschriebene Marke ersetzen, um den Vorschlag "entree_casual_dining table set" zurückzugeben. Ich dachte mir, Solrs Collate-Funktionalität würde damit gut umgehen. Als ich diese Suche eingeben, obwohl, findet Solr die richtige Marke Vorschlag, aber es ist es nicht in das Ergebnis collate zurück:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">48</int>
</lst>
<result name="response" numFound="100" start="0"/>
<lst name="spellcheck">
<lst name="suggestions">
**<lst name="entre casual dining">**
<int name="numFound">1</int>
<int name="startOffset">0</int>
<int name="endOffset">19</int>
<int name="origFreq">0</int>
<arr name="suggestion">
<lst>
**<str name="word">entree_casual_dining</str>**
<int name="freq">21</int>
</lst>
</arr>
</lst>
<bool name="correctlySpelled">false</bool>
**<str name="collation">entre casual dining table set</str>**
</lst>
</lst>
</response>
es kein Problem, Zusammenstellen hat, wenn die Korrektur von einem einzelnen falsch geschriebenen Wort in der Abfrage kam . Zum Beispiel, wenn Sie "Tabelle" falsch schreiben, es wird es zurück in die Abfrage richtig sortieren.
Was könnte schief gehen, wenn versucht wird, einen Vorschlag aus einem Mehrwort-Shingle zusammenzustellen?
Es stimmt, es gibt ein unerwartetes Verhalten. Glauben Sie, dass es eine Möglichkeit gibt, vollständige Marken-Tokens in mein Feld für die Rechtschreibprüfung zu setzen, während die übrigen Begriffe in diesem Feld whitespace-tokenisiert sind?Könnten Sie ein Beispiel für das Zusammenstellen von Mehrwort-Stichwörtern durch Solr zeigen? Vielen Dank für Ihre Antwort! –