在Solr中,有什么方法可以赋予同义词权重? (由SynonymFilterFactory
生成)
较长版本的问题/背景知识:
我们希望为SynonymFilterFactory
注入的同义词单词/术语赋予较小的权重。
因此,精确匹配会更高score
。
第一个用例只是为所有同义词赋予一个静态权重 并且如果搜索时间通过同义词匹配,它将有一个确定的(较低的) 重量比完全匹配。
在文档中找不到此内容。
Solr是否可以为SynonymFilterFactory
产生的项分配权重?
高度赞赏任何指针。
PS。另一个用例是对具有特定权重的每个同义词进行微调 对于每个特定的同义词(即同义词=“ synonyms.txt”将具有3 列而不是2)。目前看来不可能,所以也许只是静态的 上述所有同义词的权重都是可能的。
答案 0 :(得分:1)
与Lucene的大多数情况一样,解决方案是使用多个字段-一个扩展了同义词的字段,另一个不扩展。通过这种方式,您可以决定是使用启用的同义词进行搜索,还是可以在具有不同权重的不同字段中为匹配项打分-并可以根据查询调整这些权重。在Solr中,您使用copyField
在两个字段中都索引了相同的内容,然后可以在将edismax与field^5 field_with_synonyms
一起使用时对权重进行调整,以对没有同义词的匹配进行评分,使其比具有同义词的匹配高五倍。 / p>
如果您真的想在一个单一字段中完成此操作,则将需要更多的易碎和自定义设置,在此can use payloads attached to each token您需要手动对每个令牌进行不同的评分,但这是一个更高级的用例,不会很好地适合所有其他功能。不过,它将解决您的PS
用例。我还建议您查看one of the presentations from Lucene/Solr Revolution有关有效负载评分的用例。
使用两个字段是简单的方法,使用有效负载是更灵活,但也是更高级的方法。
返回从指定期限的解码有效载荷计算出的浮点值。
使用解码的有效载荷的最小值,最大值或平均值计算返回值。可以使用特殊的第一函数代替其他函数,以缩短项枚举并仅返回第一项的解码有效载荷。
指定的字段必须具有浮点或整数有效载荷编码功能(通过DelimitedPayloadTokenFilter或NumericPayloadTokenFilter)。如果未找到该术语的有效负载,则返回默认值。
payload(field_name,term)
:默认值为0.0,使用平均功能。
payload(field_name,term,default_value)
:默认值可以是常量,字段名称或另一个浮点返回函数。使用的平均功能。
payload(field_name,term,default_value,function)
:函数值可以是最小值,最大值,平均值或第一个。
与DelimitedPayloadTokenFilter一起使用的文件的格式为token|payload
,允许您将任何数值附加为该令牌的“有效载荷”。