码迷,mamicode.com
首页 > 其他好文 > 详细

58.海量bucket优化机制:从深度优先到广度优先

时间:2018-03-11 00:35:03      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:就是   field   性能   font   tar   深度优先   cost   read   优化   

buckets数量特别多的时候,深度优先和广度优先的原理,图解

假如我们有如下数据数据:每个演员的每个电影的评论。

现在我们的需求是找到前10名的演员所演的电影的评论。这是一个两层聚合题。

   

查询语句体如下:

{

"aggs" : {

"actors" : {

"terms" : {

"field" : "actors",

"size" : 10,

"collect_mode" : "breadth_first"

},

"aggs" : {

"costars" : {

"terms" : {

"field" : "films",

"size" : 5

}

}

}

}

}

}

   

es默认采用广度优先原则:

这种方式下,先把所有演员所演的电影找出来一一对应,然后再选出前10名的演员,舍弃掉其他的演员的数据。假设有1000个演员,每个演员有10个电影,这是舍弃的就是990*10=9900个数据,而不是990个数据,而且在舍弃数据之前就已经把其余数据聚合好了,这也是一次无用的计算。

深度优先

深度优先和广度优先不同,他首先选出10个演员,在选出这10个演员之前,没有经过聚合,这时舍弃的数据只是990条,并且没有经过聚合,然后再在这10个演员中聚合。这样就可以大大的提升性能。

"collect_mode" : "breadth_first" 表示设置成深度优先。

58.海量bucket优化机制:从深度优先到广度优先

标签:就是   field   性能   font   tar   深度优先   cost   read   优化   

原文地址:https://www.cnblogs.com/liuqianli/p/8542107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!