ElasticSearch - 分组聚合查询 aggs

聚合的两个概念

一  桶(Buckets) : 满足特定条件的文档的集合

         1 当聚合开始被执行,每个文档会决定符合哪个桶的条件,如果匹配到,文档将放入相应的桶并接着进行聚合操作

          如:当query和aggs一起存在时,会先执行query的主查询,主查询query执行完后会搜出一批结果,而这些结果才会被拿去aggs拿去做聚合

二  指标(Metrics) : 对桶内的文档进行统计计算

        1 桶能让我们划分文档到有意义的集合, 但是最终我们需要的是对这些桶内的文档进行一些指标的计算   

        2  指标通常是简单的数学运算(像是min、max、avg、sum),而这些是通过当前桶中的文档的值来计算的,利用指标能让你计算像平均薪资、最高出售价格、95%的查询延迟这样的数据

三 aggs聚合

      1   一个aggs裡可以有很多个聚合,每个聚合彼此间都是独立的,因此可以一个聚合拿来统计数量、一个聚合拿来分析数据、一个聚合拿来计算标准差.

      2  aggs可以嵌套在其他的aggs裡面,而嵌套的桶能作用的文档集范围,是外层的桶所输出的结果集

GET 127.0.0.1/mytest/doc/_search
{
    "query": { ... },
    "size": 0,
    "aggs": {
        "name1": {  //aggs后面接著的是一个自定义的name
            "桶": { ... }  //再来才是接桶
        },
        "name2": {  //一个aggs裡可以有很多聚合
            "桶": { ... }
        },
        "name3": {
            "桶": {
               .....
            },
            "aggs": {  //aggs可以嵌套在别的aggs裡面
                "in_name": { //记得使用aggs需要先自定义一个name
                    "桶": { ... } //in_name的桶作用的文档是name3的桶的结果
                }
            }
        }
    }
}


# 结果
{
   "hits": {
       "total": 8,
       "max_score": 0,
       "hits": [] //因为size设为0,所以没有查询结果返回
   },
   "aggregations": {
       "name1": {
           ...
       },
       "name2": {
           ...
       },
       "name3": {
           ... ,
           "in_name": {
              ....
           }
       }
   }
  }

四 聚合中常用的桶 terms、filter、top_hits

1 terms桶 : 针对某个field的值进行分组,field有几种值就分成几组

* 注意此 "terms桶" 和平常用在主查询query中的 "查找terms" 是不同的东西

2 filter桶 : 一个用来过滤的桶

*注意此处的 "filter桶" 和用在主查询query的 "过滤filter" 的用法是一模一样的,都是过滤* 

filter桶和terms桶嵌套使用,先过滤出的文档,再对这些文档进行分组

3 top_hits桶 : 在某个桶底下找出这个桶的前几笔hits,返回的hits格式和主查询query返回的hits格式一模一样

五 对嵌套字段中某个字段分组

 "aggs": {
            "label_count": {
                "terms":
                    {"field": "article_type"},
                "aggs": {
                    "related_cp": {
                        "nested": {
                            "path": "related_cp_score",
                        },
                        "aggs": {
                            "related_cp_score_label": {
                                "terms": {
                                    "field": "related_cp_score.label"
                                }
                            }
                        }
                    },
                }
            }
        }

参考文档: 嵌套对象 | Elasticsearch: 权威指南 | Elastic

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

**星光*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值