问题描述
我的要求是根据项目向用户提供有关资产名称的自动建议。
我尝试使用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>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
<str name="suggest.dictionary">mySuggester</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
但是,如果我尝试使用FuzzyLookupFactory
作为查找Impl,则会按预期返回建议结果。(但问题是Fuzzylookupfactory
不支持上下文过滤)
使用的网址: http:// ipaddress:port / solr / collection_name / suggest?suggest = true&suggest.build = true&suggest.dictionary = mySuggester&wt = json&suggest.q = Com&suggest.cfq = 1234
解决方法
(我知道这是一个老问题,但以防其他人遇到同样的问题...)
我花了几天时间处理同样的空结果。您没有说明您用作建议材料的字段类型是什么。您已将 suggestAnalyzerFieldType
设置为 string
。
默认情况下,string
是一个 fieldType,没有分析许多开箱即用的 schema.xml 示例。 Solr 手册的 Suggester 文档中只是模糊地暗示了一个关键概念,即像 AnalyzingInfixLookupFactory
和 BlendedInfixLookupFactory
这样的 lookupImpls 可以采用 not 的 suggestAnalyzerFieldType
您从中生成建议的字段的类型,而是需要包含适当分析器元素的类型,例如建议所需的 solr.WhiteSpaceTokenizer
。
就我而言,我试图从多值字符串字段中提出建议——我希望该字段没有标记化。但是直到我将 suggestAnalyzerFieldType
从 string
更改为 text_ws
(分析器仅为 sole.WhiteSpaceTokenizer
的 fieldType,我得到了空结果。
就其价值而言,如果您使用多值字符串字段作为建议,并且许多文档在该字段中包含相同的字符串值,那么 BlendedInfixLookupFactory
似乎会产生更好的结果,没有重复的建议。>