如何在Solr 5.3.0中获得建议

时间:2015-09-30 09:31:04

标签: solr autocomplete schema autosuggest solr5

我正在尝试使用Solr 5.3.0实现自动完成功能

solrconfig.xml看起来像这样

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">default</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">suggest_ngram</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">text_suggest_ngram</str>
    <str name="buildOnStartup">true</str>
  </lst>
</searchComponent>

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
<lst name="defaults">
  <str name="suggest">true</str>
  <str name="suggest.count">10</str>
</lst>
<arr name="components">
  <str>suggest</str>
</arr>

managed-schema看起来像这样:

<fieldType name="text_suggest_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.EdgeNGramFilterFactory" maxGramSize="10" minGramSize="2" />
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>


<field name="suggest_ngram" type="text_suggest_ngram" indexed="true" stored="false"/>
<field name="name" type="string" multiValued="false" indexed="true" stored="true"/>
<field name="price" type="tlong" multiValued="false" indexed="true" stored="true"/>
<copyField source="name" dest="suggest_ngram"/>

现在,当我使用Solr管理面板中的分析器时,我可以看到索引的ngrams。它成功地指出了这场比赛。

但是当我使用查询时:

http://localhost:8983/solr/products/suggest?suggest=true&suggest.build=true&wt=json&suggest.q=Jind

我得到0条建议。 回复在这里: https://api.myjson.com/bins/47r3i

有一种价值&#34; Jindal Panther&#34;其中一个文档中的名称键。

此外,我发现如果我创建一个虚拟文件并且#34;建议&#34;类型为&#34;字符串&#34;,源为&#34;名称&#34;,任何建议在&#34; name&#34;不会工作&#34;建议&#34;。这可能是对copyfield的错误配置以启用建议吗?

任何帮助将不胜感激。 提前谢谢。

编辑: 得到了解决方案。请参阅下面接受的答案及其评论。 我遇到了一个博客,精美地解释了建议者。 Solr Search的新手绝对值得一读。

https://lucidworks.com/blog/2015/03/04/solr-suggester/

1 个答案:

答案 0 :(得分:4)

您要配置建议者的字段应为store=true。它不需要索引。建议者配置将根据suggestComponet中的提供配置构建字典。 name字段已存储为true,而suggest_ngram则不存储。您需要更新架构配置,如下所示:

<field name="suggest_ngram" type="text_suggest_ngram" indexed="false" stored="true"/>

此外,您还需要提供参数suggest.dictionary,这是您用于建议的词典。对你而言,名称为default

http://localhost:8983/solr/products/suggest?suggest=true&
       suggest.build=true&
       wt=json&
       suggest.dictionary=default&
       suggest.q=Jind

或者您可以在requestHandler的{​​{1}}中提供字典配置:

/suggest