简单来说,在弹性搜索中doc_count_error_upper_bound的重要性是什么,以及如何最小化它

the*_*rid 6 elasticsearch

我总是在doc_count_error_upper_bound属性的elasticsearch中获得聚合查询的高值.对于拥有近10亿个索引文档的ES集群,有时高达8000或9000.我在大约5M doc的索引上运行查询,我得到的值大约是300到500.

问题是我的结果有多么不正确(我正在尝试基于以下JSON的前20个计数查询)

"aggs":{ "group_by_creator":{ "terms":{ "field":"creator" } } } }
Run Code Online (Sandbox Code Playgroud)

Val*_*Val 17

这在官方文档中得到了很好的解释.

在运行terms聚合时,每个分片都会找出自己的前20个术语列表,然后返回它们的20个顶级术语.协调节点将收集所有这些条款并重新排序,以获得所有分片的整体前20个术语.

如果您有多个分片,那么正如官方文档示例中所示,可能存在非零错误计数并且有一种计算文档计数错误的方法也就不足为奇了.

每个索引使用一个分片,doc错误计数将始终为零,但根据您的索引拓扑结构,它可能并不总是可行,尤其是如果您有近十亿个文档.但对于具有5M文档的索引,如果它们不大,则可以将它们存储在单个分片中.当然,这很大程度上取决于你的硬件,但如果你的分片大小不超过15/20GB,你应该没问题.您应该尝试使用单个分片创建一个新索引,并查看它是如何进行的.