【问题标题】:How to get Suggestions in Solr 5.3.0如何在 Solr 5.3.0 中获得建议
【发布时间】:2015-12-28 00:48:34
【问题描述】:

我正在尝试使用 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>

托管模式如下所示:

<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 管理面板中的分析器时,我可以看到索引的 ngram。它成功地指出了匹配。

但是当我使用查询时:

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

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

其中一个文档中的 name 键存在一个值“Jindal Panther”。

此外,我发现如果我创建一个类型为“String”、源为“name”的虚拟复制字段“suggest”,则任何适用于“name”的建议都不会适用于“suggest”。这可能是复制字段的任何错误配置以启用建议吗?

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

编辑: 得到了解决方案。请参阅下面接受的答案及其 cmets。 我遇到的一个博客很好地解释了建议者。对于 Solr Search 的新手来说,这绝对值得一读。

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

【问题讨论】:

    标签: solr autocomplete schema autosuggest solr5


    【解决方案1】:

    您要配置建议器的字段应为store=true。它不需要被索引。建议器配置将根据suggestComponet 中的提供配置构建字典。 name 字段已存储为 truesuggest_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
    

    或者您可以在/suggestrequestHandler中提供字典配置:

    <str name="suggest.dictionary">default</str>
    

    【讨论】:

    • 我现在可以从值的开头获得建议。但我也想启用中间出现的单词的建议。但是查询:http://localhost:8983/solr/products/suggest?suggest=true&amp;suggest.build=true&amp;wt=json&amp;suggest.q=Pan 没有给出任何结果。
    • 您当前使用的lookupImpl 实现是什么?
    • FuzzyLookupFactory 由于上述配置不起作用,我切换到从名称字段而不是从启用 n 克的复制字段获取建议。
    • 做到了。非常感谢:)
    • 似乎限制是一个字段。我将不得不找到另一种方法来实施建议。
    猜你喜欢
    • 2018-05-25
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多