2015-09-30 41 views
2

我試圖使用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> 

託管模式長相像這樣:

<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的管理面板使用分析儀,我可以看到indexe d圖。並且它成功地指出了比賽。

然而,當我使用查詢:

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」的名稱鍵。此外,我發現如果我創建一個類型爲「String」的虛擬複製字段「source」作爲源名稱作爲「name」,任何對「name」正常工作的建議都不適用於「suggest」。這可能是任何配置錯誤的複製域來啓用建議嗎?

任何幫助,將不勝感激。 在此先感謝。編輯: 得到了解決方案。請參閱下面的接受答案及其評論。 有一個我遇到的博客,精美地解釋Suggesters。 Solr Search的新手絕對值得一讀。

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

回答

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/suggest的字典配置:

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

我能夠從現在的價值開始得到的建議。但我也希望能夠從中間出現的單詞提出建議。 但查詢: 'http:// localhost:8983/solr/products/suggest?suggest = true&suggest.build = true&wt = json&suggest.q = Pan'不會給出任何結果。 –

+0

你正在使用的當前'lookupImpl'實現是什麼? – YoungHobbit

+0

FuzzyLookupFactory 由於上述配置不起作用,我轉而從名稱字段獲取建議,而不是從啓用n克的複製字段獲取建議。 –