gpt4 book ai didi

elasticsearch - Elasticsearch 7 track_total_hits 如何提高查询速度?

转载 作者:行者123 更新时间:2023-12-03 23:39:56 40 4
gpt4 key购买 nike

我最近从 Elasticsearch 6 升级到 7,偶然发现了 10000 次点击限制。
Changelog , Documentation ,我还发现了一个blog post from a company尝试了这个新功能并测量了他们的性能提升。
但我仍然不确定此功能如何以及为何起作用。或者它只是在特殊情况下提高性能?
特别是当涉及排序时,我无法理解它。因为(至少在我的世界中)在对集合进行排序时,您必须访问每个文档,而根据 Documentation,这正是他们试图避免的情况。 :“通常,如果不访问所有匹配项,就无法准确计算总命中数,这对于匹配大量文档的查询来说成本很高。”
希望有人能解释一下事情是如何运作的,以及我遗漏了哪一点。

最佳答案

至少有两种不同的上下文不需要对所有文档进行排序:
A. 当 index sorting配置后,文档已按排序顺序存储在索引段文件中。因此,每当查询指定与索引预先排序的排序相同的排序时,则只需要访问和返回每个段文件的前 N ​​个文档。所以在这种情况下,如果你只关心前N个结果而不关心总命中数,你可以简单地设置track_total_hits为假。这是一个很大的优化,因为不需要访问索引的所有文档。
B.在filter context中查询时(即 bool/filter )因为不会计算分数。索引只是检查与是/否问题匹配的文档,并且该过程通常非常快。由于没有评分,每个分片只返回前 N 个匹配文档。
track_total_hits设置为 false(因为您不关心匹配文档的确切数量),那么根本不需要计算文档,因此不需要访问所有文档。
track_total_hits设置为 N(因为你只关心是否至少有 N 个匹配的文档),那么每个分片 N 个文档后计数将停止。
相关链接:

  • https://github.com/elastic/elasticsearch/pull/24864
  • https://github.com/elastic/elasticsearch/issues/33028
  • https://www.elastic.co/blog/faster-retrieval-of-top-hits-in-elasticsearch-with-block-max-wand
  • 关于elasticsearch - Elasticsearch 7 track_total_hits 如何提高查询速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66414349/

    40 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com