ですが、これは説明が必要ですが、このディスカッションはSolrインデックスに重要なフレーズを持つ人にとって役に立ちます。Collating phrase spellcheckの結果はSolr
私は電子商取引の状況で検索を強化するためにSolrを使用しています。ブランド名のスペルチェックの提案を改善しようとしています。デフォルトでSolrは、結果のフレーズが意味をなさないかどうかにかかわらず、個々の単語を個別にチェックします。たとえば、「paula dean」を検索すると、「paula bean?」と表示され、ブランド名は「Paula Deen」となります。現在、私のスペル辞書は、spellFieldと呼ばれる空白トークン化フィールドです。スペルチェックの完全なブランド名を索引付けするために、自分のSolrのインポートでデータベースのブランド名の空白をアンダースコア、つまりEntree Casual Dining - > Entree_Casual_Diningに置き換えました。ここspellFieldのFIELDTYPEためのスキーマは次のとおりです。ブランド名にアンダースコアを置く
<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>
は、私は空白トークン化分野における単一のトークンとして複数の単語からブランド名を維持するために考えることができる最高の方法でした。返されたアンダースコアの候補を簡単に取り除くことができます。そこで、今すぐクエリが来ると、Solrはクエリをシンクリングし、それぞれの屋根板についてスペルミスの提案を探します。つまり、 "entre casual dining" - > "entre"、 "casual" "entre casual"、 "casual casual dining"、 "entre casual casual dining"などがあります。屋根裏の「カジュアル・ダイニング」の屋根板は、「Entree_Casual_Dining」にあるものと似ているので、「entree_casual_dining」が提案として戻ってくる。すばらしいです。
質問に「entre casual dining table set」のようなブランド名と製品の種類が含まれているとします。ブランド名のスペルを修正し、スペルミスのあるブランド全体を置き換えて、「entree_casual_dining table set」という提案を返すことをおすすめします。私はSolrの照合機能がこれをうまく処理できると考えました。私はこの検索を入力すると、しかし、Solrが正しいブランドの提案を見つけたが、それは戻って結果にそれを照合しません:
<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>
補正は、クエリ内の単一のスペルミスの単語から来たときには、照合問題はありません。たとえば、「表」の綴りを誤って入力すると、照合結果が正しく照合されます。
複数単語の屋根板からの提案を照合しようとすると、何がうまくいかないのでしょうか?
実際、予期しない動作があります。あなたはスペルチェック・フィールドに完全なブランド名トークンを入れる方法があると思いますが、そのフィールドの残りの部分は空白スペースでトークン化されていますか?Solrが複数単語のキーワードを照合する例を表示できますか?お返事をありがとうございます! –