ES聚合查询-桶的概念

ES聚合查询-桶的概念

桶聚合

  • 桶(Buckets),满足特定条件的文档的集合
  • 桶 在概念上类似于SQL中的分组(group by)
  • 分桶就是将某一类共同特征的数据归为一类,然后计算总数,例如一个员工属于男性桶或者女性桶,商品评级:高档、中档、低档等等
  • 当聚合开始被执行,每个文档里面的值通过计算来决定符合哪个桶的条件。如果匹配到,文档将放入相应的桶并接着进行聚合操作。
  • 桶也可以被嵌套在其他桶里面,提供层次化的或者有条件的划分方案。例如,海淀区被放入北京这个桶,而整个北京桶会被放入中国这个桶。

实例

  • GET /cars/transactions/_search
    {
        "size" : 0,
        "aggs" : { 
            "popular_colors" : { 
                "terms" : { 
                  "field" : "color"
                }
            }
        }
    }
    
  • 聚合的基本结构

  • "aggregations" : { <!-- 最外层的聚合键,也可以缩写为 aggs -->
        "<aggregation_name>" : { <!-- 聚合的自定义名字 -->
            "<aggregation_type>" : { <!-- 聚合的类型,指标相关的,如 max、min、avg、sum,桶相关的 terms、filter 等 -->
                <aggregation_body> <!-- 聚合体:对哪些字段进行聚合,可以取字段的值,也可以是脚本计算的结果 -->
            }
            [,"meta" : {  [<meta_data_body>] } ]? <!---->
            [,"aggregations" : { [<sub_aggregation>]+ } ]? <!-- 在聚合里面在定义子聚合 -->
        }
        [,"<aggregation_name_2>" : { ... } ]* <!-- 聚合的自定义名字 2 -->
    }
    
  • 聚合操作被置于顶层参数 aggs之下,完整形式 aggregations 同样有效

  • 然后,可以为聚合指定一个名称,本例中是:popular_colors。

  • 最后,定义单个桶的类型 terms。

  • size设置为0,记录返回数为0提高查询效率。

  • 以color字段分桶,所以桶会为每个颜色动态创建新桶。

  • 查询结果如下:

  • {
    ...
       "hits": {
          "hits": [] 
       },
       "aggregations": {
          "popular_colors": { 
             "buckets": [
                {
                   "key": "red", 
                   "doc_count": 4 
                },
                {
                   "key": "blue",
                   "doc_count": 2
                },
                {
                   "key": "green",
                   "doc_count": 2
                }
             ]
          }
       }
    }
    
  • popular_colors聚合是作为 aggregations字段的一部分被返回的。

  • 每个桶的key都与color字段里找到的唯一词对应。它总会包含doc_count字段,告诉我们包含该词项的文档数量。

  • 每个桶的数量代表该颜色的文档数量。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值