Autocomplete 获取短语的solr autosuggest结果

Autocomplete 获取短语的solr autosuggest结果,autocomplete,solr,autosuggest,Autocomplete,Solr,Autosuggest,我想使用solr为搜索字段创建一个自动建议下拉列表,但我在尝试获取短语建议时遇到了困难。当我搜索“dog t”时,我想得到一个包含短语的结果集,例如“dog treat”、“dog trick”、“dog tags”,。。。但是我得到了两个结果集,一个是“dog”(比如“dogs”“dog bone”“doggy”…),另一个是“t”(比如“tree”“time”…) 我的查询url是: http://localhost:8985/solr/mycollection/suggest?q=%22d

我想使用solr为搜索字段创建一个自动建议下拉列表,但我在尝试获取短语建议时遇到了困难。当我搜索“dog t”时,我想得到一个包含短语的结果集,例如“dog treat”、“dog trick”、“dog tags”,。。。但是我得到了两个结果集,一个是“dog”(比如“dogs”“dog bone”“doggy”…),另一个是“t”(比如“tree”“time”…)

我的查询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>

建议
org.apache.solr.spelling.Suggester
org.apache.solr.spelling.suggest.tst.TSTLookup
暗示
0.0001
真的
短信建议
真的
建议
真的
10
建议
“建议”的字段类型在模式中定义为

    <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>

我找到了两种解决问题的方法

一种是创建一个自定义查询句柄,它不会将q参数拆分为多个单词

我选择的另一个选项是使用参数spellcheck.q而不是q。我使用的是Solr3.4.0和拼写检查,q给了我500个错误。我将solr更新为3.6.1,现在它似乎工作正常


非常简单易懂

SOLR提供类似于FST(从字段开始的建议)、AnalyzingInfix的建议,我们可以利用这些建议生成智能短语/单词自动建议。 阅读本文以了解有关实现的更多信息