如何在Solr 5.3.0中获得建议(How to get Suggestions in Solr 5.3.0)
我正在尝试使用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
在其中一个文档中,名称键存在值“Jindal Panther”。
此外,我发现如果我创建一个虚拟拷贝字段“建议”类型为“字符串”,源为“名称”,任何在“名称”上工作正常的建议将不适用于“建议”。 这可能是对copyfield的任何错误配置以启用建议吗?
任何帮助,将不胜感激。 提前致谢。
编辑:得到了解决方案。 请参阅下面接受的答案及其评论。 我遇到了一个博客,精美地解释了建议者。 Solr Search的新手绝对值得一读。
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://stackoverflow.com/questions/32862609