2011-07-11 15 views
22

私はsuggesterのsolr wikiの記事をTに近づけました:http://wiki.apache.org/solr/Suggester。私は次のクエリ(または同様のもの)を実行すると、しかしsolr suggesterは結果を返さない

<searchComponent class="solr.SpellCheckComponent" name="suggest"> 
    <lst name="spellchecker"> 
    <str name="name">suggest</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
    <str name="field">description</str> 
    <float name="threshold">0.05</float> 
    <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest"> 
    <lst name="defaults"> 
    <str name="spellcheck">true</str> 
    <str name="spellcheck.dictionary">suggest</str> 
    <str name="spellcheck.onlyMorePopular">true</str> 
    <str name="spellcheck.count">5</str> 
    <str name="spellcheck.collate">true</str> 
    </lst> 
    <arr name="components"> 
    <str>suggest</str> 
    </arr> 
</requestHandler> 

:私は私のsolrconfig.xmlで次のXMLを持って

../suggest/?q=barbequ 

私は戻って、次の結果のXMLを取得:

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">78</int> 
    </lst> 
    <lst name="spellcheck"> 
     <lst name="suggestions"/> 
    </lst> 
</response> 

ご覧のとおり、これはあまり役に立ちません。これを解決するための提案はありますか?

答えて

21

物事のカップルのインデックスを再作成、私はそのことを考えることができますこの問題の原因となる可能性があります

  • をソースフィールド(「説明」)は間違っている - これは確かにあなたのスペルチェッカーの種条件フィールドであることを確認してください。フィールドが別のケース(たとえば、 "description"の代わりに "Description")であってもかまいません。

  • schema.xmlのソースフィールドが正しく設定されていないか、ソース辞書が無効になる原因となるフィルタによって処理されています。別のフィールドを使用して辞書をシードし、<copyfield />を使用して関連する他のフィールドをそのフィールドにコピーします。

  • 用語「バーベキューは」SpellCheckComponentで

  • をレコードの少なくとも5%に表示されません(あなたが<float name="threshold">0.05</float>ことによって、この要件を示してきました)ので、ルックアップ辞書に含まれていません<str name="spellcheck.onlyMorePopular">true</str>設定は、より多くの結果を生成する用語だけが提案として返されることを意味します。 Suggesterの文書によれば、これは別の機能(重み付けによるソートのソート)を持っていますが、これをfalseに切り替えて問題を引き起こしているかどうかを調べる価値があります。

私のschema.xmlの関連部品:

<schema> 
    <types> 
     <!-- Field type specifically for spell checking --> 
     <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
      <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.StandardFilterFactory" /> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.StandardFilterFactory" /> 
      </analyzer> 
     </fieldType> 
    </types> 
    <fields> 
     <field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true" /> 
    </fields> 

    <!-- Copy fields which are used to seed the spell checker --> 
    <copyField source="name" dest="spell" /> 
    <copyField source="description" dest="spell" /> 
<schema> 
+0

あなたはこれを詳しく説明できますか: Suggesterの文書によると、これは別の機能(重み付けによるソートのソート)を持っていますが、これをfalseに切り替えて問題の原因を調べる価値があります。 –

1

用語-パラメータは同様に、のschema.xmlに設定されている場合は、確認してください:

<field name="TEXT" type="text_en" indexed="true" stored="true" multiValued="true" 
        termVectors="true" 
        termPositions="true" 
        termOffsets="true"/> 

...再起動のSolrと再び

+0

私は既存のterm-parameter(他のものはすべて同じ)にtermVosis = "true"、termPositions = "true"およびtermOffsets = "true"を追加しましたが、それでもまだ上記と同じ結果が返されます。 – Marquis

+0

再起動してインデックスを再作成しましたか?あなたのフィールド型の定義はそれらの設定を上書きしないと確信していますか?おそらくリレーに提案はありませんか? –

+0

ええと、私は再起動して再インデックス化しました。私はそれが上書きされているとは思わない。私は/ selectクエリで完全に返される製品がたくさんあることを知っています。提案がそこにあることを再確認する方法はありますか?また、私はちょうどこのスペルチェッカーメソッドを組み込んでみました:http://wiki.apache.org/solr/SpellCheckComponent。同じこと - スペルチェックノードで結果が返されません。 – Marquis

6

問題は、あなたが文字列/suggestの代わりに、私の設定では/spell

../suggest/?q=barbequ

これを照会していることだろう私は渡します:

/solr/spell?q=barbequ&spellcheck=true&spellcheck.collate=true

そして、あなたはあなたが私がところでSolrの4上で実行しているよ

&spellcheck.build=true

を含める必要がスペルチェックを行うことは初めて。だから、おそらく/示唆は、何か他のことをするまったく異なるエンドポイントです。もしそうなら、お詫び申し上げます。

+0

ありがとう! spellckec.build = true worked !!!!! –

関連する問題