ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例
一、两个核心概念:bucket和metric
1.1 bucket
有如下数据
city | name |
北京 | 张三 |
北京 | 李四 |
天津 | 王五 |
天津 | 赵六 |
天津 | 王麻子 |
划分出来两个bucket,一个是北京bucket,一个是天津bucket
北京bucket:包含了2个人,张三,李四
上海bucket:包含了3个人,王五,赵六,王麻子
1.2 metric
metric,就是对一个bucket执行的某种聚合分析的操作,比如说求平均值,求最大值,求最小值
比如下面的一个sql语句
select count(*) from book group studymodel
bucket:group by studymodel --> 那些studymodel相同的数据,就会被划分到一个bucket中
metric:count(*),对每个bucket中所有的数据,计算一个数量。例如avg(),sum(),max(),min()
二、聚合示例
2.1 数据准备
首先创建book索引
PUT /book/
{"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"description": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"studymodel": {"type": "keyword"},"price": {"type": "double"},"timestamp": {"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},"pic": {"type": "text","index": false}}}
}
添加测试数据
PUT /book/_doc/1
{"name": "Bootstrap开发","description": "Bootstrap是一个非常流行的开发框架。此开发框架可以帮助不擅长css页面开发的程序人员轻松的实现一个css,不受浏览器限制的精美界面css效果。","studymodel": "201002","price": 38.6,"timestamp": "2019-08-25 19:11:35","pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags": ["bootstrap","dev"]
}PUT /book/_doc/2
{"name": "java编程思想","description": "java语言是世界第一编程语言,在软件开发领域使用人数最多。","studymodel": "201001","price": 68.6,"timestamp": "2019-08-25 19:11:35","pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags": ["java","dev"]
}PUT /book/_doc/3
{"name": "spring开发基础","description": "spring 在java领域非常流行,java程序员都在用。","studymodel": "201001","price": 88.6,"timestamp": "2019-08-24 19:11:35","pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg","tags": ["spring","java"]
}
2.2 计算每个studymodel下的商品数量
sql语句: select studymodel,count(*) from book group by studymodel
"size": 0, ==> 作用 :只需要聚合的数据,不需要查询的数据
GET /book/_search
{"size": 0,"query": {"match_all": {}},"aggs": {"group_by_model": {"terms": {"field": "studymodel"}}}
}
结果:
{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_model" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "201001","doc_count" : 2},{"key" : "201002","doc_count" : 1}]}}
}
2.3 计算每个tags下的商品数量
设置字段"fielddata": true,不设置会报错
PUT /book/_mapping/
{"properties": {"tags": {"type": "text","fielddata": true}}
}
查询
GET /book/_search
{"size": 0, "query": {"match_all": {}}, "aggs": {"group_by_tags": {"terms": { "field": "tags" }}}
}
结果:
{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "dev","doc_count" : 2},{"key" : "java","doc_count" : 2},{"key" : "bootstrap","doc_count" : 1},{"key" : "spring","doc_count" : 1}]}}
}
2.4 加上搜索条件,计算每个tags下的商品数量
GET /book/_search
{"size": 0, "query": {"match": {"description": "java程序员"}}, "aggs": {"group_by_tags": {"terms": { "field": "tags" }}}
}
结果:
{"took" : 70,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "java","doc_count" : 2},{"key" : "dev","doc_count" : 1},{"key" : "spring","doc_count" : 1}]}}
}
2.5 计算每个tag下的商品的平均价格
子聚合
GET /book/_search
{"size": 0,"aggs": {"group_by_tags": {"terms": {"field": "tags"},"aggs": {"avg_price": {"avg": {"field": "price"}}}}}
}
结果:
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "dev","doc_count" : 2,"avg_price" : {"value" : 53.599999999999994}},{"key" : "java","doc_count" : 2,"avg_price" : {"value" : 78.6}},{"key" : "bootstrap","doc_count" : 1,"avg_price" : {"value" : 38.6}},{"key" : "spring","doc_count" : 1,"avg_price" : {"value" : 88.6}}]}}
}
2.6 计算每个tag下的商品的平均价格,按照平均价格降序排序
小技巧,如果是查询全部,match_all可省略
GET /book/_search
{"size": 0,"aggs": {"group_by_tags": {"terms": {"field": "tags","order": {"avg_price": "desc"}},"aggs": {"avg_price": {"avg": {"field": "price"}}}}}
}
结果:
{"took" : 4,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "spring","doc_count" : 1,"avg_price" : {"value" : 88.6}},{"key" : "java","doc_count" : 2,"avg_price" : {"value" : 78.6}},{"key" : "dev","doc_count" : 2,"avg_price" : {"value" : 53.599999999999994}},{"key" : "bootstrap","doc_count" : 1,"avg_price" : {"value" : 38.6}}]}}
}
2.7 按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格
GET /book/_search
{"size": 0,"aggs": {"group_by_price": {"range": {"field": "price","ranges": [{"from": 0,"to": 40},{"from": 40,"to": 60},{"from": 60,"to": 80}]},"aggs": {"group_by_tags": {"terms": {"field": "tags"},"aggs": {"average_price": {"avg": {"field": "price"}}}}}}}
}
结果:
{"took" : 5,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_price" : {"buckets" : [{"key" : "0.0-40.0","from" : 0.0,"to" : 40.0,"doc_count" : 1,"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "bootstrap","doc_count" : 1,"average_price" : {"value" : 38.6}},{"key" : "dev","doc_count" : 1,"average_price" : {"value" : 38.6}}]}},{"key" : "40.0-60.0","from" : 40.0,"to" : 60.0,"doc_count" : 0,"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [ ]}},{"key" : "60.0-80.0","from" : 60.0,"to" : 80.0,"doc_count" : 1,"group_by_tags" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "dev","doc_count" : 1,"average_price" : {"value" : 68.6}},{"key" : "java","doc_count" : 1,"average_price" : {"value" : 68.6}}]}}]}}
}
ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例相关推荐
- JavaScript高级程序设计学习(二)之基本概念
任何语言的核心都必然会描述这门语言基本的工作原理.而描述的内容通常都要涉及这门语 言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念.如前所述, ECMA-262通过叫做 ECMAS ...
- Java基础学习(二十七)之IO流
1. File 1.1 File类概述和构造方法(myFile中的com.itheima_01中的FileDemo01) File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对 ...
- JavaScript基础学习(二)—JavaScript基本概念
一.语法 1.区分大小写 JavaScript是一种弱类型的脚本语言.它区分大小写,变量名test与Test表示两个完全不同的变量. 2.标识符 所谓标识符就是变量.函数.属性的名字,它有以下规则. ...
- Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?
AtomicInteger 在高并发下性能不好,如何解决?以及为什么会出现这种情况? 我们知道在 JDK1.5 中新增了并发情况下使用的 Integer/Long 所对应的原子类 AtomicInte ...
- CUPS学习二:CUPS概念介绍。
距离上一篇博客已经过去差不多半年的时间,虽然这半年一直有其他各种莫名其妙的事打断,但是工作内容始终还是围绕着linux打印系统在开展.虽然进度很慢,里边到现在还是有细节没有太弄懂,但是源码和介绍已经差 ...
- ballerina 学习二十七 项目k8s部署 运行
ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...
- ElasticSearch7.3学习(二十一)----Filter与Query对比、使用explain关键字分析语法
1.数据准备 首先创建book索引 PUT /book/ {"settings": {"number_of_shards": 1,"number_of ...
- 【Elasticsearch】Elasticsearch中 aggs (桶)聚合查询和进行二次聚合查询
[Elasticsearch]Elasticsearch中 aggs (桶)聚合查询和进行二次聚合查询 Bucket aggregationsedit Bucket aggregations don' ...
- ElasticSearch练习二:聚合语法学习(aggs、bucket、metric、hitogram、date hitogram)
bucket与metric两个核心概念 初始化数据 city name 北京 小李 北京 小王 上海 小张 上海 小丽 上海 小陈 按照某个字段进行bucket划分,那个字段的值相同的那些数据,就会被 ...
最新文章
- Android onMeasure方法介绍
- python(matplotlib7)——subplot 一个figure中国显示几个小图 分格显示
- ZOJ 3879(大模拟)
- dns 320 linux,linux 下 dns服务器(三 配置篇)
- 1.13编程基础之综合应用 45 十进制到八进制 python
- Node.js入门 - 永恒的Hello World!
- Maven - 构建与命令
- MTK 驱动---(8)emmc 介绍
- php转换excel文件怎么打开方式,用PHP将mysql数据表转换为excel文件格式_php
- 0423-mysql查询语句大全
- 贺利坚老师汇编课程54笔记:ZF零标志ZERO FLAG
- ftp测试工具_Linux网络配置 | FTP 实战-本地用户登录
- Linux常用命令汇总 - Linux Shell Cheat Sheet
- 计算机操作系统(第四版)课后习题答案(第一章)
- HTML5绘制八大行星加入字体,html5中用canvas画八大行星围绕太阳转
- CSP—— 登机牌条码(多项式的求解以及多项式的除法)
- 苦禅箜mm让我帮她做的作业
- 梅特勒托利多xk3124电子秤说明书_梅特勒托利多称重仪表XK3124 B520
- 幼儿园观察记录的目的和目标_幼儿园观察目的是什么?
- 张小龙的30条产品法则
热门文章
- springcloud 学习项目
- 【网络通信 -- WebRTC】项目实战记录 -- Chrome 启动参数总结
- CSS学习小记1(Dreamweaver CC 创建选择器)
- 2021高校毕业生就业薪酬分析:博士、硕士、本科、专科的月起薪算数平均值分别为14823元、10113元、5825元、3910元[图]
- 计算机 校级研究生学术会议,通知 | 【研究生评奖评优】关于做好浙江大学2017-2018学年计算机学院研究生学年小结及评奖评优工作的通知...
- 转载一篇不错的介绍ORM框架的文章
- 种草!.NET开发控件集ComponentOne Studio Enterprise!
- 2020 ESRI全球开发者大会 - 回想与总结
- 在cmd中输入javac不行_cmd运行java可以javac不行
- C#winform实现文本框只能输入数字功能