【问题标题】:giving weight for SynonymFilterFactory terms赋予 SynonymFilterFactory 术语权重
【发布时间】:2019-11-12 07:58:11
【问题描述】:

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

问题的较长版本/一些背景:

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

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

在文档中找不到这个。

Solr 有没有办法为SynonymFilterFactory 生成的术语分配权重?

高度赞赏的任何指针。

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

【问题讨论】:

    标签: elasticsearch solr lucene


    【解决方案1】:

    与 Lucene 的大多数情况一样,解决方案是使用多个字段 - 一个扩展同义词的字段,一个不扩展同义词。这样,您可以决定是否完全启用同义词进行搜索,或者您可以使用不同的权重对不同字段中的匹配进行评分 - 您可以根据您的查询调整这些权重。在 Solr 中,您使用 copyField 将相同的内容索引到两个字段中,然后您可以在将 edismax 与 field^5 field_with_synonyms 一起使用时调整权重,以使没有同义词的命中率比有同义词的命中率高五倍。

    如果您真的想在一个单一的字段中执行此操作,则需要更脆弱和自定义的设置,您 can use payloads attached to each token 手动对每个令牌进行不同的评分,但这是一个更高级的用例,不能很好地融入所有其他功能。不过,它将解决您的 PS 用例。我还建议您查看one of the presentations from Lucene/Solr Revolution,了解有效载荷评分的用例。

    使用两个字段是简单的方法,使用有效负载是更灵活但也更高级的方法。

    返回根据指定术语的解码有效负载计算的浮点值。

    使用已解码有效负载的最小值、最大值或平均值计算返回值。可以使用特殊的 first 函数代替其他函数,以缩短术语枚举并仅返回第一个术语的解码有效负载。

    指定的字段必须具有浮点或整数负载编码能力(通过 DelimitedPayloadTokenFilter 或 NumericPayloadTokenFilter)。如果没有找到该术语的有效负载,则返回默认值。

    payload(field_name,term):默认值为0.0,使用平均函数。

    payload(field_name,term,default_value):默认值可以是常量、字段名或其他浮点返回函数。使用的平均函数。

    payload(field_name,term,default_value,function):函数值可以是最小值、最大值、平均值或第一个。

    与 DelimitedPayloadTokenFilter 一起使用的文件格式为 token|payload,允许您附加任何数值作为该令牌的“有效负载”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多