赋予SynonymFilterFactory术语权重

时间:2019-07-01 16:48:24

标签: elasticsearch solr lucene

在Solr中,有什么方法可以赋予同义词权重? (由SynonymFilterFactory生成)

较长版本的问题/背景知识:

我们希望为SynonymFilterFactory注入的同义词单词/术语赋予较小的权重。 因此,精确匹配会更高score

第一个用例只是为所有同义词赋予一个静态权重 并且如果搜索时间通过同义词匹配,它将有一个确定的(较低的) 重量比完全匹配。

在文档中找不到此内容。

Solr是否可以为SynonymFilterFactory产生的项分配权重?

高度赞赏任何指针。

PS。另一个用例是对具有特定权重的每个同义词进行微调 对于每个特定的同义词(即同义词=“ synonyms.txt”将具有3 列而不是2)。目前看来不可能,所以也许只是静态的 上述所有同义词的权重都是可能的。

1 个答案:

答案 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,允许您将任何数值附加为该令牌的“有效载荷”。