How to get Suggestions in Solr 5.3.0

不打扰是莪最后的温柔 提交于 2019-12-19 10:46:11

问题


I am trying to implement auto complete feature using Solr 5.3.0

solrconfig.xml looks like this

<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 looks like this:

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

Now when I use the analyzer from the admin panel of Solr, I can see the indexed ngrams. And it successfully points out the match.

However when I use the query:

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

I get 0 suggestions. The response is here: https://api.myjson.com/bins/47r3i

There exists a value "Jindal Panther" for the name key in one of the docs.

Moreover, I have found that if I create a dummy copyfield "suggest" with type as "String", with source as "name", any suggestion that works fine on "name" will not work on "suggest". Can this be any misconfiguration of copyfield to enable suggestions?

Any help would be appreciated. Thanks in advance.

EDIT: Got the solution. See the accepted answer and its comments below. There is a blog that I encountered that beautifully explains Suggesters. It is definitely worth reading for a newbie to Solr Search.

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


回答1:


The field on which you want to configure the suggester should be store=true. It need not to be indexed. The suggester configuration will build a dictionary according to the provide configuration in the suggestComponet. The name field have stored as true where as suggest_ngram is not. You need to update the schema configuration like this:

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

Also you need to provide the parameter suggest.dictionary, the dictionary you are using for suggestions. For you it is names as default.

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

OR you can provide the dictionary configuration in requestHandler of /suggest:

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


来源:https://stackoverflow.com/questions/32862609/how-to-get-suggestions-in-solr-5-3-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!