1. 数据的准备

我们的数据结构为:

https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json

{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
{"index":{"_id":"6"}}
{"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}

通过 POST /bank/account/_bulk 批量插入我们的自定义的 bank中。

2. 定义

elasticsearch7.x中为我们提供了这几种查询:

Elasticsearch将聚合分为三类:

  • 度量聚合或计算聚合,诸如总和、最大值、最小或平均值等。

  • 桶聚合,根据字段值,范围或其他条件将文档分组为桶(也称为箱)。

  • 管道聚合从其他聚合(而不是文档或字段)获取输入。

3. 演示

我们用几个案例演示其中的几个API的用法

1)搜索address中包含mill的所有人的年龄分布以及平均年龄

先通过Query DSL查询出address中包含mill的所有数据(如果我们只想要统计的数据,可以用size把数据过滤掉)

然后用aggs聚合。terms将筛选出来的数据按age分组统计;avg则查询数据中的年龄平均值

GET /bank/_search
{"query": {"match": {"address": "mill"}},"aggs": {"ageAgg": {"terms": { "field": "age" } },"avgAge": { "avg": { "field": "age" } }},"size":0
}

最后的结果为:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 4,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"ageAgg" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : 38,"doc_count" : 2},{"key" : 28,"doc_count" : 1},{"key" : 32,"doc_count" : 1}]},"avgAge" : {"value" : 34.0}}
}
​

可以发现,aggregations对象种有我们定义的agAgg对象和avgAge对象,存放着我们想要的值。

2)按照年龄聚合,并查询这些年龄段对应的平均薪资

这次我们是相当于聚合后,在根据聚合的结果进行再次聚合。

GET /bank/_search
{"query": {"match_all": {}},"aggs": {"ageAgg": {"terms": { "field": "age" },"aggs":{"avgBalance":{"avg":{"field":"balance"}}}}},"size":0
}

我们在ageAgg中,嵌套一个aggs,对balance字段进行求平均值。

返回的数据结构如下:

  "aggregations" : {"ageAgg" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 463,"buckets" : [{"key" : 31,"doc_count" : 61,"avgBalance" : {"value" : 28312.918032786885}}...   

3)查出所有年龄分布,并且这些年龄分段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资

这次我们先按年龄分组,在年龄分组中嵌套gender分组,然后基于gender分组求balance的平均薪资

GET /bank/_search
{"query": {"match_all": {}},"aggs": {"ageAgg": {"terms": { "field": "age" },"aggs":{"genderAgg":{"terms":{"field": "gender.keyword"},"aggs": {"balanceAvg": {"avg": {"field": "balance"}}}}}}},"size":0
}

返回的数据结构如下:

  "aggregations" : {"ageAgg" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 463,"buckets" : [{"key" : 31,"doc_count" : 61,"genderAgg" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "M","doc_count" : 35,"balanceAvg" : {"value" : 29565.628571428573}},{"key" : "F","doc_count" : 26,"balanceAvg" : {"value" : 26626.576923076922}}]}},......

4. 总结

elasticsearch官方为我们提供了很多的聚合类型,我们需要使用是可以查看对应的文档。

https://www.elastic.co/guide/en/elasticsearch/reference/7.11/search-aggregations-metrics-avg-aggregation.html

elasticsearch aggregation的入门案例相关推荐

  1. Spring Data ElasticSearch入门案例

    Spring Data ElasticSearch入门案例 创建maven工程elasticsearch_springdata 基于maven导入坐标 导入spring data elasticsea ...

  2. 2021年大数据Flink(八):Flink入门案例

    目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...

  3. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  4. Vue安装配置以及入门案例

    Vue Vue简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不 ...

  5. AOP配置开发入门案例

    该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...

  6. python与人工智能编程-总算明白python人工智能编程入门案例

    Python是非常简洁的一种脚本语言,写同样的程序,代码量仅为java的三分一,除了性能没有Java强之外,它的优点还是相当多的.以下是小编为你整理的python人工智能编程入门案例 下载Active ...

  7. mybatis基于注解的入门案例

    mybatis基于注解的入门案例:             把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句             同时需要在SqlMa ...

  8. python截图保存到内存卡_Python画月饼,云上过中秋,天池Python入门案例系列赛开启...

    阿里云天池推出了一个Python入门案例系列教程,在此之前他们还推出了一个Python基础训练营. 在天池龙珠计划Python训练营中,天池给学习者详细的介绍了Python的基础和进阶知识,根据学习者 ...

  9. Spring-Security 简介、入门案例详解、安全框架、权限验证 SSM项目 使用 JavaConfig配置

    Spring-Security 简介 一.介绍 二.详细步骤 1.创建一个maven项目 添加web 框架. 2.导入依赖 3.项目整体结构 4.Spring 容器配置 5.servletContex ...

最新文章

  1. 队列的定义与操作-顺序存储,链式存储(C语言)
  2. 前端学习(3131):react-hello-react之总结ref
  3. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
  4. 问题 L: 求一元二次方程的根
  5. 树莓派——使用SDK定期备份本地文件到OSS(自用)
  6. 数学分析教程 第十二章学习感受
  7. 自然数简化到素数:黎曼猜想RiemannHypothesis及其解释(公号回复“黎曼猜想”下载PDF经典收藏版彩标资料)
  8. 常见的10种“瓶颈”
  9. SpringBoot和Vue验证码
  10. 量子点表面修饰PEG/抗体/金属/细胞膜/无机材料标记与制备
  11. 小木虫网站无法登陆(账号突然被封禁)的解决办法
  12. REDIS11_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理
  13. 《千万别学英语》精粹
  14. 更新win10后连接WIFI时,提示“无法连接到这个网络”
  15. Algorand 系列一:VRF 密码学抽签原理及其在 Algorand 中的应用
  16. 锂电池采购成本多次上涨,如何利用数字化采购管理系统高效降本?
  17. c语言字符串做为函数参数传递,c语言:字符串做为函数参数传递
  18. Threes.js入门篇之2 - Hello World
  19. 获取浏览器中的cookie
  20. Android Studio连OPPO手机安装apk失败问题解决方案

热门文章

  1. java筑基期(9)----ajaxjson(1)
  2. 操作系统课设--虚拟内存
  3. 深入解析 Kubebuilder:让编写 CRD 变得更简单
  4. 数据结构--队列(数组)的一种实现
  5. 491. 递增子序列(回溯算法)
  6. 738. 单调递增的数字(贪心算法)
  7. 关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题
  8. [reference]-armv8汇编学习-书籍推荐
  9. [register]-TCR(Translation Control Register)寄存器详解
  10. Linux shell/makefile/gic/python指令速查-inprocess