zoukankan      html  css  js  c++  java
  • 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" 表示设置成深度优先。

  • 相关阅读:
    elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务
    Linux 查看系统硬件信息(实例详解)
    linux grep命令详解
    Boot loader: Grub进阶(转)
    Boot loader: Grub入门(转)
    内核模块管理(转)
    Centos启动流程(转)
    Linux 内核启动流程(转)
    程序的运行顺序(转)
    查询进程打开的文件(转)
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8542107.html
Copyright © 2011-2022 走看看