Solr 有什么方法可以给同义词赋予权重吗? (由 SynonymFilterFactory
生成)
问题的较长版本/一些背景:
我们希望为 SynonymFilterFactory
注入(inject)的同义词词/术语赋予较小的权重。
因此,精确匹配会获得更高的分数
。
第一个用例只是为所有同义词赋予一个静态权重 如果搜索时间通过同义词匹配,它将有一定的(较低) 重量比精确匹配。
在文档中找不到此内容。
Solr 有没有办法为 SynonymFilterFactory
生成的术语分配权重?
非常感谢任何指点。
PS。另一个用例是使用特定权重微调每个同义词 对于每个特定的同义词(即 synonyms="synonyms.txt"将有 3 列而不是 2)。目前看来不可能,所以也许只是静态的 上述所有同义词的权重都是可能的。最佳答案
与 Lucene 的大多数情况一样,解决方案是使用多个字段 - 一个字段扩展了同义词,另一个字段不扩展。这样您就可以决定是否在启用同义词的情况下进行搜索,或者您可以使用不同的权重在不同的字段中对命中进行评分 - 并且您可以根据您的查询调整这些权重。在 Solr 中,您使用 copyField
将相同的内容索引到两个字段中,然后您可以在使用 edismax 和 field^5 field_with_synonyms
来调整没有同义词的命中率比带有同义词的高出五倍。
如果您真的想在一个单一字段内完成此操作,则需要更加脆弱和自定义的设置,您can use payloads attached to each token手动对每个 token 进行不同的评分,但这是一个更高级的用例,不能完全适合所有其他功能。不过,它会解决您的 PS
用例。我还建议查看 one of the presentations from Lucene/Solr Revolution关于有效负载评分的用例。
使用两个字段是最简单的方法,使用有效负载是更灵活、但也是更高级的方法。
Returns the float value computed from the decoded payloads of the term specified.
返回值是使用解码后的有效负载的最小值、最大值或平均值计算的。可以使用特殊的第一个函数代替其他函数,以短路术语枚举并仅返回第一个术语的解码后的有效负载。
The field specified must have float or integer payload encoding capability (via DelimitedPayloadTokenFilter or NumericPayloadTokenFilter). If no payload is found for the term, the default value is returned.
payload(field_name,term)
: default value is 0.0, average function is used.
payload(field_name,term,default_value)
: default value can be a constant, field name, or another float returning function. average function used.
payload(field_name,term,default_value,function)
: function values can be min, max, average, or first.
与 DelimitedPayloadTokenFilter 一起使用的文件采用 token|payload
格式,并允许您附加任何数值作为该 token 的“有效负载”。
关于elasticsearch - 为 SynonymFilterFactory 术语赋予权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839428/