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

Posted Outback

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了58.海量bucket优化机制:从深度优先到广度优先相关的知识,希望对你有一定的参考价值。

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优化机制:从深度优先到广度优先的主要内容,如果未能解决你的问题,请参考以下文章

数据结构C语言版 图的广度优先遍历和深度优先遍历 急急急 会查重

Python爬虫从入门到放弃之 关于深度优先和广度优先

深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系?

深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系?

ES优化聚合查询之深度优先和广度优先

Python爬虫从入门到放弃之 关于深度优先和广度优先