elasticsearch - 为 SynonymFilterFactory 术语赋予权重

标签 elasticsearch solr lucene

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/

相关文章:

java - 使用 lucene 日期范围内和 AND 运算符进行搜索

java - 如何在 lucene 4.x 中正确实现委托(delegate)分词器?

elasticsearch - 使用Elastic在Webshop中进行分面搜索

elasticsearch - 无法使用动态模板映射在ouchdb上创建elasticsearch river

elasticsearch - 使用数据库中50个表中的数据创建一个kibana仪表板

java - Solr 不会覆盖 - 重复的 uniqueKey 条目

elasticsearch - 如何在 Elasticsearch 中为精确搜索提供比语音搜索更高的分数?

java - Lucene Solr 使用复杂的过滤器

docker - docker-compose solr以独立模式创建多个内核

search - 每天索引中的文档