绊脚石乃是进身之阶。

关于ES聚合查询中的collect模式深度优先和广度优先算法

Elasticsearch | 作者 cheeseinlove | 发布于2019年12月22日 | 阅读数:2930

在官方文档中https://www.elastic.co/guide/c ... .html看到对于两种模式的区别描述,在多层聚合查询的场景下,深度优先会先构建好每一层所有的分桶树然后进行下一层聚合,所有分桶树构建完毕后才会进行修剪,而广度优先则是每一层聚合树构建完后进行修剪然后再构建下一层。那么问题来了按照这样的描述的话广度优先似乎没有缺点啊那为什么还默认使用深度优先呢?因为对于每一层聚合分桶构建来说BFS都做到了内存使用最优。最后官方举的直方图的例子意思是如果每个分桶的数据量巨大不宜使用广度优先,这里也不太懂,按照他的例子12个月份12个桶假设我设置size=10,只要10个桶的数据再做下一层聚合那么不管你数据量多大,总节约了两个桶的内存啊。求大神指教不胜感激
已邀请:

tacsklet - 公司有用到es

赞同来自:

我的理解是:广度优先会对上层的分组中的数据做缓存,以便在进行下级聚合的时候复用。深度优先在进行分组后不会将这部分数据放入缓存中。因此在如果无用的桶不多的情况下,广度优先是比深度优先更占用内存的。

要回复问题请先登录注册