目录
- 1. 背景
- 2. 前置条件
- 2.1 创建索引
- 2.2 准备数据
- 3. 各种聚合
- 3.1 统计人数最多的2个省
- 3.1.1 dsl
- 3.1.2 运行结果
- 3.2 统计人数最少的2个省
- 3.2.1 dsl
- 3.2.2 运行结果
- 3.3 根据字段值排序-根据年龄聚合,返回年龄最小的2个聚合
- 3.3.1 dsl
- 3.3.2 运行结果
- 3.4 子聚合排序-先根据省聚合,然后根据每个聚合后的最小年龄排序
- 3.4.1 dsl
- 3.4.2 运行结果
- 3.5 脚本聚合-根据省聚合,如果地址中有黄冈市则需要出现黄冈市
- 3.5.1 dsl
- 3.5.2 运行结果
- 3.6 filter-以省分组 , 并且只包含北的省,但是需要排除湖北省
- 3.6.1 dsl
- 3.6.2 运行结果
- 3.7 多term聚合-根据省和性别聚合,然后根据最大年龄倒序
- 3.7.1 dsl
- 3.7.2 运行结果
- 3.8 missing value 处理
- 3.9 多个聚合-同时返回根据省聚合和根据性别聚合
- 3.9.1 dsl
- 3.9.2 运行结果
- 3.1 统计人数最多的2个省
- 4. 总结
- 4.1 可以聚合的字段
- 4.2 如果我们想返回所有的聚合Term结果
- 4.3 聚合数据不准
- 4.4 排序注意事项
- 4.4.1 _count 排序
- 4.4.2 字段值排序
- 4.4.3 子聚合排序
- 4.5 多term聚合
- 5、源码地址
- 6. 参考链接
bucket
聚合下的terms
聚合 。记录一下terms
聚合的各种用法,以及各种注意事项 , 防止以后忘记 。2. 前置条件2.1 创建索引
PUT /index_person{"settings": {"number_of_shards": 1},"mappings": {"properties": {"id": {"type": "long"},"name": {"type": "keyword"},"sex": {"type": "keyword"},"age": {"type": "integer"},"province": {"type": "keyword"},"address": {"type": "text","analyzer": "ik_max_word","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
2.2 准备数据PUT /_bulk{"create":{"_index":"index_person","_id":1}}{"id":1,"name":"张三","sex":"男","age":20,"province":"湖北","address":"湖北省黄冈市罗田县匡河镇"}{"create":{"_index":"index_person","_id":2}}{"id":2,"name":"李四","sex":"男","age":19,"province":"江苏","address":"江苏省南京市"}{"create":{"_index":"index_person","_id":3}}{"id":3,"name":"王武","sex":"女","age":25,"province":"湖北","address":"湖北省武汉市江汉区"}{"create":{"_index":"index_person","_id":4}}{"id":4,"name":"赵六","sex":"女","age":30,"province":"北京","address":"北京市东城区"}{"create":{"_index":"index_person","_id":5}}{"id":5,"name":"钱七","sex":"女","age":16,"province":"北京","address":"北京市西城区"}{"create":{"_index":"index_person","_id":6}}{"id":6,"name":"王八","sex":"女","age":45,"province":"北京","address":"北京市朝阳区"}
3. 各种聚合3.1 统计人数最多的2个省3.1.1 dslGET /index_person/_search{"size": 0,"aggs": {"agg_sex": {"terms": {"field": "province","size": 2}}}}
3.1.2 运行结果文章插图
3.2 统计人数最少的2个省3.2.1 dsl
GET /index_person/_search{"size": 0,"aggs": {"agg_sex": {"terms": {"field": "province","size": 2,"order": {"_count": "asc"}}}}}
注意: 不推荐使用 _count:asc
来统计,会导致统计结果不准
,看下方的总结章节 。3.2.2 运行结果
文章插图
3.3 根据字段值排序-根据年龄聚合,返回年龄最小的2个聚合3.3.1 dsl
GET /index_person/_search{"size": 0,"aggs": {"agg_sex": {"terms": {"field": "age","size": 2,"order": {"_key": "asc"}}}}}
注意: 这种根据字段值来排序,聚合的结果是正确的 。3.3.2 运行结果
文章插图
3.4 子聚合排序-先根据省聚合,然后根据每个聚合后的最小年龄排序3.4.1 dsl
GET /index_person/_search{"size": 0,"aggs": {"agg_sex": {"terms": {"field": "province","order": {"min_age": "asc"}},"aggs": {"min_age": {"min": {"field": "age"}}}}}}GET /index_person/_search{"size": 0,"aggs": {"agg_sex": {"terms": {"field": "province","order": {"min_age.min": "asc"}},"aggs": {"min_age": {"stats": {"field": "age"}}}}}}
注意:子聚合排序一般也是不准的,但是如果是根据子聚合的最大值倒序
和最小值升序
又是准的 。3.4.2 运行结果
文章插图
3.5 脚本聚合-根据省聚合,如果地址中有黄冈市则需要出现黄冈市3.5.1 dsl
GET /index_person/_search{"size": 0,"runtime_mappings": {"province_sex": {"type": "keyword","script": """String province = doc['province'].value;String address = doc['address.keyword'].value;if(address.contains('黄冈市')){emit('黄冈市');}else{emit(province);}"""}},"aggs": {"agg_sex": {"terms": {"field": "province_sex"}}}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 赛尔号破解破解幽契之门通关符文位置图示
- “黑绷带的力量” 首先,它有一个奇怪的名字,叫“黑绷带” 其次,在看产品介绍之初,它是一款晚霜。
- 云原生之旅 - 11)基于 Kubernetes 动态伸缩 Jenkins Build Agents
- C#多线程之线程基础篇
- 我的世界漏斗与漏斗之间怎么相连(我的世界漏斗上怎么放东西)
- 洛谷 P4135 作诗 题解
- Java安全之CC3
- 云顶之弈冒险迭嘉阵容搭配推荐攻略
- 猫之城补偿武装SSR茂林余音/浪花约会/疯人院/暴走炮手选择建议
- 中国碳排放量占全球百分之几 世界碳排放量