【问题标题】:What is the difference between `constant_score + filter` and `term` query?`constant_score + filter` 和 `term` 查询有什么区别?
【发布时间】:2020-01-20 02:00:34
【问题描述】:

我在Elasticsearch 有两个查询:

{
    "term" : {
        "price" : 20
    }
}

"constant_score" : { 
            "filter" : {
                "term" : { 
                    "price" : 20
                }
            }
        }

它们返回相同的查询结果。我想知道它们之间的主要区别是什么。我读了一些关于scoring 文档的文章。而且我相信这两个查询都是评分文件。 constant_score 将使用 default score 1.0 来匹配文档的分数。所以我认为这两者之间没有太大区别。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    结果会完全一样。

    不过,最大的区别在于constant_score/filter 版本将缓存term 查询的结果,因为它在filter context 中运行。所有未来的执行都将利用该缓存。此外,constant_score 查询的一个特点是返回的分数始终等于给定的提升值(默认为 1)

    第一个查询将在过滤器上下文之外运行,因此不会从过滤器缓存中受益。

    【讨论】:

    • 我同意你的观点,过滤器上下文将缓存结果。但就constant_score而言,由于我使用的是term查询,所以term查询中的分数应该总是1对吧?所以在这种情况下,得分没有什么不同。对吗?
    • 得分没有区别。术语查询将始终返回 1,因为它基本上是一个是/否过滤器,与一个提升为 1 的 constant_score 查询相同。这里唯一的区别在于性能,constant_score 将利用过滤器缓存,而单个术语查询不会
    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多