我的需求是根据用户的项目为他们提供资产名称的自动建议。我已经尝试使用AnalyzingInfixLookupFactory and BlendedInfixLookupFactory
,因为它们是唯一支持上下文过滤的。但是没有返回建议结果。下面是solrconfig.xml
的摘录:<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">assetname_str</str>
<str name="indexPath">/home/suggest_index</str>
<str name="contextField">projectid</str>
<str name="weightField">weight</str>
<str name="suggestAnalyzerFieldType">string</str>
个<str name="buildOnStartup">false</str>
<str name="buildOnCommit">false</str>
</lst>
x1米15英寸<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
个<lst name="defaults">
<str name="suggest">true</str>
x1米19英寸1x
x1米20英寸</lst>
<arr name="components">
<str>suggest</str>
</arr>
x1米25英寸
但是,如果我尝试使用FuzzyLookupFactory
作为查找Impl,则会按预期返回建议结果。(但问题是Fuzzylookupfactory
不支持上下文过滤)
使用的网址:http://ipaddress:port/solr/集合名称/sugggest?suggest=true& sugest.build=true& sugest.dictionary=我的建议&wt=json& sugest.q=Com& sugest.cfq= 1234
1条答案
按热度按时间yxyvkwin1#
(我知道这是一个老问题,但万一别人偶然发现它与同样的问题...)
我花了几天的时间来处理同样的空结果,你没有说你用什么类型的字段作为建议的材料,你把
suggestAnalyzerFieldType
设置为string
。默认情况下,
string
是一个fieldType,没有分析许多现成的schema.xml示例。一个关键概念(在Solr手册的Suggester文档中只是模糊地暗示了这一点)是AnalyzingInfixLookupFactory
和BlendedInfixLookupFactory
这样的lookupImpls可以接受一个suggestAnalyzerFieldType
,它不是您从中生成建议的字段的类型,而是 * 需要 * 一个包含适当分析器元素的类型,例如建议所需的solr.WhiteSpaceTokenizer
。在我的例子中,我试图从一个多值字符串字段进行建议--我希望该字段没有标记化。但是直到我将
suggestAnalyzerFieldType
从string
更改为text_ws
(fieldType的分析器只有sole.WhiteSpaceTokenizer
),我得到了空结果。值得注意的是,如果您使用多值字符串字段作为建议,并且许多文档在该字段中包含相同的字符串值,那么
BlendedInfixLookupFactory
似乎会产生更好的结果,并且不会产生重复的建议。