【问题标题】:is there a way to boost matches in long documents in elasticsearch有没有办法在elasticsearch中增加长文档中的匹配
【发布时间】:2013-07-03 23:23:34
【问题描述】:

在 elasticsearch 中,文档的长度对搜索结果的最终得分非常重要。因此,如果我在一个只有一行长的字段中有一个匹配项,那么它的得分将远高于一个匹配项,比如说……一个包含 5 页文本的文档。 有没有办法覆盖这种行为,或者可靠地反复提升结果来克服这种行为?

【问题讨论】:

  • 发布我的答案后重新阅读问题...您要禁用考虑长度的事实还是更重视更长的匹配字段?实际上,在计算分数时,它与匹配字段的长度有关,而不是与整个文档的大小有关。
  • 两者都需要不同的方法吗?如果是这样,方法有什么区别?
  • 不同之处在于,如果禁用规范,则不再考虑长度,因此长字段将与短字段相同。如果您想更加重视不那么简单的长字段,可以使用 custom_score 查询和脚本来实现。

标签: elasticsearch


【解决方案1】:

我猜你的意思是在计算分数时考虑了匹配字段的长度。如果您只想禁用此行为,则可以在索引时省略规范。这样你也会失去索引时间提升,但我猜你没有使用它,即使你需要提升,你也应该使用查询时间提升,更灵活。

您必须像这样更新您的字段的映射:

"field_name" : {
    "type" : "string",
     "omit_norms" : true
}

如果您想为所有字符串字段覆盖此默认行为,您可以使用如下动态模板:

{
    "type_name" : {
        "dynamic_templates" : [
            {
                "omit_norms_template" : {
                    "match_mapping_type" : "string",
                    "mapping" : {
                        "omit_norms" : true
                    }
                }
            }
        ]
    }
}

【讨论】:

  • 其实我需要索引时间吹嘘:\有没有办法在查询时应用这个?有什么影响?
  • 哎呀... omit_norms 你正在失去索引时间提升,我会切换到查询时间提升。使用弹性搜索有不同的方法。你是如何提升你的文档的?基于什么?
  • 好的,我会尝试查询时间提升...我正在根据任意业务逻辑提升我的文档
  • 你能告诉我一些使用 elasticsearch 提高查询时间的例子吗?我似乎找不到任何好的。
  • 看看这个其他答案:stackoverflow.com/questions/12427449/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2019-10-03
  • 2018-02-15
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多