2012-04-02 16 views
2

ですが、これは説明が必要ですが、このディスカッションはSolrインデックスに重要なフレーズを持つ人にとって役に立ちます。Collat​​ing 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> 

補正は、クエリ内の単一のスペルミスの単語から来たときには、照合問題はありません。たとえば、「表」の綴りを誤って入力すると、照合結果が正しく照合されます。

複数単語の屋根板からの提案を照合しようとすると、何がうまくいかないのでしょうか?

答えて

0

私はsolrがマルチワードキーワードの候補を問題なく照合するのに成功しているのを見ました。私はSolr 3.1を使っていました。私が持っていた1つの問題は、複数単語のキーワードの中の複数の単語のスペルが間違っていて、solrの提案があるときに、 "照合"をオンにしたときにスペルチェッカーによって提示される複数の組み合わせがあるということでした。

シナリオで「_」を使用しても、「_」が単語の一部としても考慮され、計算に使用されるため、単語のスペルが間違っていると複雑になることが想定されます。屋根板の工場がまた破裂した屋根板を作り出したので、それがあなたがそれが働くことを期待するように働くかどうかだけ疑問に思う。

+0

実際、予期しない動作があります。あなたはスペルチェック・フィールドに完全なブランド名トークンを入れる方法があると思いますが、そのフィールドの残りの部分は空白スペースでトークン化されていますか?Solrが複数単語のキーワードを照合する例を表示できますか?お返事をありがとうございます! –

1

私はもっとこのように見えるためにあなたのアナライザーを変更することを検討します:

<analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="0" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer>  

1にpreserveOriginalを設定することで、両方の個々の単語としてブランド名をトークン化となります一つの大きなトークンとして。また、Shingleのものは廃止され、4.0で廃止予定です。