Solr建议器中的AnalysisInfixLookupFactory实现未返回建议结果

问题描述

我的要求是根据项目向用户提供有关资产名称自动建议。 我尝试使用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 文档中只是模糊地暗示了一个关键概念,即像 AnalyzingInfixLookupFactoryBlendedInfixLookupFactory 这样的 lookupImpls 可以采用 notsuggestAnalyzerFieldType您从中生成建议的字段的类型,而是需要包含适当分析器元素的类型,例如建议所需的 solr.WhiteSpaceTokenizer

就我而言,我试图从多值字符串字段中提出建议——我希望该字段没有标记化。但是直到我将 suggestAnalyzerFieldTypestring 更改为 text_ws(分析器仅为 sole.WhiteSpaceTokenizer 的 fieldType,我得到了空结果。

就其价值而言,如果您使用多值字符串字段作为建议,并且许多文档在该字段中包含相同的字符串值,那么 BlendedInfixLookupFactory 似乎会产生更好的结果,没有重复的建议。>