6

solr を使用して検索フィールドの自動提案ドロップダウンを作成したいのですが、フレーズの提案を取得しようとすると行き詰まります。「犬 t」を検索すると、「犬のおやつ」、「犬のトリック」、「犬のタグ」などのフレーズを含む 1 つの結果セットを取得したいのですが、代わりに 2 つの結果セット (1 つは「犬」) を取得します。 」 (「犬」「犬の骨」「犬」など) と「t」の別のもの (「木」「時間」など)

私のクエリのURLは次のとおりです。

http://localhost:8985/solr/mycollection/suggest?q=%22dog%20t%22&wt=json

私のリクエストハンドラーはsolrconfigで次のように定義されています...

<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">suggest</str>  <!-- the indexed field to derive suggestions from -->
      <float name="threshold">0.0001</float>
      <str name="buildOnCommit">true</str>
    </lst>
<str name="queryAnalyzerFieldType">textSuggest</str>
  </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">10</str>
    </lst>
    <arr name="components">
      <str>suggest</str>
    </arr>
  </requestHandler>

「提案」のフィールドタイプは、スキーマで次のように定義されています

    <fieldType name="textSuggest" class="solr.TextField" positionIncrementGap="100" >
      <analyzer type="index">
 <tokenizer class="solr.KeywordTokenizerFactory"/>
   <filter class="solr.LowerCaseFilterFactory"/>
 <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" />
<filter class="solr.WordDelimiterFilterFactory"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                preserveOriginal="1" splitOnCaseChange="1"
                />
 </analyzer>
<analyzer type="query">
   <tokenizer class="solr.KeywordTokenizerFactory"/>
   <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
    </fieldType>
4

3 に答える 3

6

私の問題に対する2つの解決策が見つかりました...

1 つは、q パラメータを複数の単語に分割しないカスタム queryHandler を作成することです。

私が選択したもう 1 つのオプションは、q の代わりにパラメータ spellcheck.q を使用することです。私は solr 3.4.0 を使用していましたが、spellcheck.q を使用すると 500 エラーが発生しました。solr を 3.6.1 に更新したところ、正しく動作するようになりました。

于 2012-09-27T19:39:54.833 に答える
2

SOLR は、FST (フィールドの先頭からの提案)、AnalyzingInfixなどの提案者を提供し、インテリジェントなフレーズ/単語の自動提案を生成するために活用できます。実装の詳細については、この記事をお読み ください http://lucidworks.com/blog/solr-suggester/

于 2015-05-05T18:36:07.277 に答える
0

とてもシンプル&わかりやすい。http://www.andornot.com/blog/post/Advanced-autocomplete-with-Solr-Ngrams-and-Tw​​itters-typeaheadjs.aspx

于 2015-01-27T12:15:35.110 に答える