Solr 建议者:上下文过滤器错误地应用于 FileDictionaryFactory
Solr suggester: Context Filter incorrectly applied to FileDictionaryFactory
在 docs 中,它表示上下文过滤仅在“使用 AnalyzingInfixLookupFactory
或 BlendedInfixLookupFactory
时生效,当由 DocumentDictionaryFactory
支持时”。
但是,我发现在使用 FileDictionaryFactory
时会应用上下文过滤。这不起作用,因为没有要应用上下文过滤器的文档。
http://localhost:8983/solr/mycore/suggest?qt=suggest&suggest.dictionary=location&q=russia
> Returns ["Russia"]
http://localhost:8983/solr/mycore/suggest?qt=suggest&suggest.dictionary=location&q=russia&cfq=a
> Returns []
这是我的建议配置:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">location</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">FileDictionaryFactory</str>
<str name="sourceLocation">tdwg.txt</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="highlight">false</str>
</lst>
<lst name="suggester">
<str name="name">common-name</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">region.vernacular_names_t</str>
<str name="indexPath">common_name_suggest</str>
<str name="contextField">searchable.context_ss</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="highlight">false</str>
</lst>
</searchComponent>
如您所见,我 想要对其中一位建议者进行上下文过滤(并且它工作正常)。所以我不能简单地从我的请求中删除 suggest.cfq
参数。
我是否可以更改我的配置,以便上下文过滤器不会应用于我的 FileDictionaryFactory
推荐者?
我过去已经遇到过这个问题,似乎当请求中存在 suggest.cfq
时,上下文过滤将应用于 every(启用)查找支持它的实现(AnalyzingInfix 和 BlendedInfix)。
似乎除了切换到另一个查找实现之外没有其他解决方案。对于您不想应用上下文过滤的字典,比这 2 个要多。
例如,您可以尝试将 FuzzyLookupFactory
用于“位置”建议者,并且不会应用上下文过滤器。
注意: 这是一种变通方法,因为不可能 infix 与 FuzzyLookup 或 AnalyzingLookup 实现匹配(只有整个前缀来自输入令牌的考虑在内)。
如果您真的需要两个建议者的中缀匹配,您可能必须在合并建议之前发出 2 个并行请求 :/.
在 docs 中,它表示上下文过滤仅在“使用 AnalyzingInfixLookupFactory
或 BlendedInfixLookupFactory
时生效,当由 DocumentDictionaryFactory
支持时”。
但是,我发现在使用 FileDictionaryFactory
时会应用上下文过滤。这不起作用,因为没有要应用上下文过滤器的文档。
http://localhost:8983/solr/mycore/suggest?qt=suggest&suggest.dictionary=location&q=russia
> Returns ["Russia"]
http://localhost:8983/solr/mycore/suggest?qt=suggest&suggest.dictionary=location&q=russia&cfq=a
> Returns []
这是我的建议配置:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">location</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">FileDictionaryFactory</str>
<str name="sourceLocation">tdwg.txt</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="highlight">false</str>
</lst>
<lst name="suggester">
<str name="name">common-name</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">region.vernacular_names_t</str>
<str name="indexPath">common_name_suggest</str>
<str name="contextField">searchable.context_ss</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="highlight">false</str>
</lst>
</searchComponent>
如您所见,我 想要对其中一位建议者进行上下文过滤(并且它工作正常)。所以我不能简单地从我的请求中删除 suggest.cfq
参数。
我是否可以更改我的配置,以便上下文过滤器不会应用于我的 FileDictionaryFactory
推荐者?
我过去已经遇到过这个问题,似乎当请求中存在 suggest.cfq
时,上下文过滤将应用于 every(启用)查找支持它的实现(AnalyzingInfix 和 BlendedInfix)。
似乎除了切换到另一个查找实现之外没有其他解决方案。对于您不想应用上下文过滤的字典,比这 2 个要多。
例如,您可以尝试将 FuzzyLookupFactory
用于“位置”建议者,并且不会应用上下文过滤器。
注意: 这是一种变通方法,因为不可能 infix 与 FuzzyLookup 或 AnalyzingLookup 实现匹配(只有整个前缀来自输入令牌的考虑在内)。
如果您真的需要两个建议者的中缀匹配,您可能必须在合并建议之前发出 2 个并行请求 :/.