Elasticsearch教程(6) ES桶聚合Query DSL-Terms Aggregation
Elasticsearch 桶聚合 Terms Aggregation
- 1 准备测试数据
- 1.1 插入数据DSL
- 1.2 表格展示
- 2 Terms Aggregation(根据字段的值分组)
- 2.1 根据dept分组,求每个部门的数量
- 2.1.1 SQL
- 2.1.2 DSL
- 2.2 根据dept分组,求每个部门的数量,并排序
- 2.2.1 SQL
- 2.2.2 DSL
- 2.3 对统计结果过滤,加having
- 2.3.1 SQL
- 2.3.2 SQL转DSL语句
- 2.4 过滤需统计文档的范围
- 2.4.1 SQL
- 2.4.2 DSL
桶聚合的种类很多,一篇短文难以覆盖,这篇先介绍Terms Aggregation(按字段分组),类似MySQL中的Group By,它是最常用的聚合方式。注意用于聚合的字段不能是text类型。
1 准备测试数据
1.1 插入数据DSL
PUT /user/_doc/1
{"id":"1","name":"张一","dept":"web","path":"dept1,man1","birthday": "2008-11-16","status":"1"
}PUT /user/_doc/2
{"id":"2","name":"张二","dept":"web","path":"dept1,man2","birthday": "2008-12-17","status":"1"
}PUT /user/_doc/3
{"id":"3","name":"张三","dept":"web","path":"dept1,man3","birthday": "2009-10-10","status":"1"
}PUT /user/_doc/4
{"id":"4","name":"李四","dept":"java","path":"dept2,man4","birthday": "2012-01-01","status":"1"
}PUT /user/_doc/5
{"id":"5","name":"王五","dept":"java","path":"dept2,man5","birthday": "2012-07-01","status":"0"
}PUT /user/_doc/6
{"id":"6","name":"王六","dept":"data","status":"0","path":"dept3,man6","birthday": "2009-12-12","gender":"man"
}
1.2 表格展示
id | name | birthday | gender | dept | path | status |
---|---|---|---|---|---|---|
1 | 张一 | 2008-11-16 | web | dept1,man1 | 1 | |
2 | 张二 | 2008-12-17 | web | dept1,man2 | 1 | |
3 | 张三 | 2009-10-10 | web | dept1,man3 | 1 | |
4 | 李四 | 2012-01-01 | java | dept2,man4 | 1 | |
5 | 王五 | 2012-07-01 | java | dept2,man5 | 0 | |
5 | 王六 | 2009-12-12 | man | data | dept3,man6 | 0 |
2 Terms Aggregation(根据字段的值分组)
Terms聚合用于分组
2.1 根据dept分组,求每个部门的数量
2.1.1 SQL
#=======group by=======
POST /_xpack/sql?format=txt
{"query": "SELECT dept, COUNT(*) num FROM user GROUP BY dept"
}
dept | num
---------------+---------------
data |1
java |2
web |3
2.1.2 DSL
GET /user/_doc/_search
{"size":0,"aggs":{"depts":{"terms":{"field":"dept.keyword"}}}
}
"aggregations" : {"depts" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "web","doc_count" : 3},{"key" : "java","doc_count" : 2},{"key" : "data","doc_count" : 1}]}}
2.2 根据dept分组,求每个部门的数量,并排序
2.2.1 SQL
POST /_xpack/sql?format=txt
{"query": "SELECT dept, COUNT(*) num FROM user GROUP BY dept ORDER BY num DESC"
}
dept | num
---------------+---------------
web |3
java |2
data |1
2.2.2 DSL
GET /user/_doc/_search
{"size":0,"aggs":{"depts":{"terms":{"field":"dept.keyword","order" : { "_count" : "desc" }}}}
}
上面按照数量降序,如果将"_count"改成"_key",就是按照key(这里就是指dept)降序
"aggregations" : {"depts" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "web","doc_count" : 3},{"key" : "java","doc_count" : 2},{"key" : "data","doc_count" : 1}]}}
2.3 对统计结果过滤,加having
2.3.1 SQL
POST /_xpack/sql?format=txt
{"query": "SELECT dept, COUNT(*) num FROM user GROUP BY dept HAVING num > 1 ORDER BY num DESC"
}
过滤出数量>1的部门
dept | num
---------------+---------------
web |3
java |2
2.3.2 SQL转DSL语句
POST /_xpack/sql/translate
{"query": "SELECT dept, COUNT(*) num FROM user GROUP BY dept HAVING num > 1 ORDER BY num DESC"
}
2.4 过滤需统计文档的范围
2.4.1 SQL
POST /_xpack/sql?format=txt
{"query": "SELECT dept, COUNT(*) num FROM user WHERE status = 1 GROUP BY dept ORDER BY num DESC"
}
2.4.2 DSL
GET /user/_doc/_search
{"size":0,"query":{"term":{"status":1}},"aggs":{"dept_count":{"terms":{"field":"dept.keyword","order":{"_count":"desc"}}}}
}
Elasticsearch教程(6) ES桶聚合Query DSL-Terms Aggregation相关推荐
- Es Bucket聚合(桶聚合) 第二篇-Terms Aggregation与Significant Terms Aggregation
作者介绍:<RocketMQ技术内幕>作者,中间件兴趣圈微信公众号维护者,文末有对应的二维码,关注后可以与作者更好的互动. 本章将介绍elasticsearch最重要的桶聚合terms a ...
- Query DSL - Terms Query
Terms Query 词组查询 Returns documents that contain one or more exact terms in a provided field. 返回字段中包含 ...
- Elasticsearch教程(27) ES拼接查询条件的工具类
一.前言 在大多数公司产线Elasticsearch还在6.X的时候,ES已经更新到8.X了,这更新速度也太快了. 目前我手上的项目也做到一套工具类兼容ES6.1到ES7.9+.我用的是原生的ES6. ...
- 【Elasticsearch教程3】查询文档 term terms terms_set
版本约定 本系列博客ES版本如下: Elasticsearch 7.17.X Spring Data Elasticsearch 4.4.X Elasticsearch下载地址 Spring Data ...
- Query DSL - Terms set Query
Terms set Query 词条集查询 Returns documents that contain a minimum number of exact terms in a provided f ...
- Elasticsearch教程(4) High Level REST Client API 查询 聚合 分组
ES High Level REST Client API 查询 聚合 1 准备数据 1.1 插入测试数据 2 Maven引入ES 3 创建Client 4 查询API 4.1 根据id查询单条数据 ...
- Es Bucket聚合(桶聚合) Terms Aggregation与Significant Terms Aggregation
本章将介绍elasticsearch最重要的桶聚合terms aggregation. Terms Aggregation 多值聚合,根据库中的文档动态构建桶.基于词根的聚合,如果聚合字段是text的 ...
- Es Bucket聚合(桶聚合) 第一篇(常用桶聚合一览)
本篇将开始介绍Elasticsearch Bucket聚合(桶聚合). Buket Aggregations(桶聚合)不像metrics Aggregations(度量聚合)那样计算字段上的度量,而是 ...
- Elastic Search Java API(文档操作API、Query DSL查询API)、es搜索引擎实战demo
elastic search实战小demo:https://github.com/simonsfan/springboot-quartz-demo,分支:feature_es 之前在 Elastic ...
最新文章
- Cpp / checked_delete 原理
- Apache Lucene 7.0即将发布!
- java 打包后 文件资源文件 jar,JAVA打包成JAR无法找到资源文件
- mysql按照日期先去重在分组_【巨杉数据库Sequoiadb】【咨询】【数据操作】【聚集查询】在执行聚集查询时,字符类型的字段能否按照实际内容进行分组去重...
- smartSVN 分支与合并
- 游戏桌面壁纸|英雄联盟,热爱游戏的朋友看这里
- 2021年四川省政府工作报告:促进5G、大数据、区块链等技术与传统产业融合发展
- 远程无法连接数据库的问题
- brew update:以下未跟踪的工作树文件将被合并覆盖:
- 《海量数据库解决方案》读后感
- IQ FMEA-失效模式及影响分析
- STM32程序下载1:通过keil-ST-Link方式下载
- HTML ===> 页面添加数学公式
- 机器人开发--技术路线简介
- 流媒体服务器分发RTSP视频流并发压力测试
- 美瞳微商如何引流?微商卖美瞳怎么宣传?美瞳微商如何引流人脉
- Backtrader量化平台教程-跟踪止损单(十)
- 魔方(10)金字塔魔方、金字塔二重奏魔方
- Pion流媒体服务测试
- 编程逻辑入门必备2:归纳推理
热门文章
- rhel8编译安装axel
- java jdk8 Stream流操作学习
- Redis高性能原理:Redis为什么这么快?
- 腾讯携手教育部教指委、中国信通院发布犀牛鸟开源人才培养计划
- 学习小计(部分摘自cocos官方文档) 2
- VC 判断程序是否启动.
- 佳能打印机处于错误状态是怎么回事_惠普哪款打印机最稳定 惠普打印机推荐【详解】...
- 使用linux shell+sendmail+139邮箱实现定时短信报警
- 使用huggingface全家桶(transformers, datasets)实现一条龙BERT训练(trainer)和预测(pipeline)
- 云IDE:AWS Cloud 9