原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

什么是聚合(Aggregation)

1、 elasticsearch 除了搜索以外,提供的针对ES数据进行统计分析的功能

实时性高、Hadoop(T+1)

2、通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档

3、高性能,只需要一套语句,就可以从Elasticsearch得到分析结果(无需在客户端自己去实现分析逻辑)

集合的分类

Aggregation共分为三种:Metric Aggregations、Bucket Aggregations、 Pipeline Aggregations、Matrix Aggregations。

Metric Aggregations 主要是做 一系列的统计,Bucket Aggregations相当于分组。

准备测试数据:


  1. PUT zhifou/_doc/1
  2. {
  3. "name":"顾老二",
  4. "age":30,
  5. "from": "gu",
  6. "desc": "皮肤黑、武器长、性格直",
  7. "tags": ["黑", "长", "直"]
  8. }
  9. PUT zhifou/_doc/2
  10. {
  11. "name":"大娘子",
  12. "age":18,
  13. "from":"sheng",
  14. "desc":"肤白貌美,娇憨可爱",
  15. "tags":["白", "富","美"]
  16. }
  17. PUT zhifou/_doc/3
  18. {
  19. "name":"龙套偏房",
  20. "age":22,
  21. "from":"gu",
  22. "desc":"mmp,没怎么看,不知道怎么形容",
  23. "tags":["造数据", "真","难"]
  24. }
  25. PUT zhifou/_doc/4
  26. {
  27. "name":"石头",
  28. "age":29,
  29. "from":"gu",
  30. "desc":"粗中有细,狐假虎威",
  31. "tags":["粗", "大","猛"]
  32. }
  33. PUT zhifou/_doc/5
  34. {
  35. "name":"魏行首",
  36. "age":25,
  37. "from":"广云台",
  38. "desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!",
  39. "tags":["闭月","羞花"]
  40. }

Bucket Aggregations  的api 介绍

下面例子使用 term是 进行分桶

分组查询

现在我想要查询所有人的年龄段,并且按照15~20,20~25,25~30分组,并且算出每组的平均年龄。

分析需求,首先我们应该先把分组做出来。


  1. GET zhifou/_search
  2. {
  3. "size": 0,
  4. "query": {
  5. "match_all": {}
  6. },
  7. "aggs": {
  8. "age_group": {
  9. "range": {
  10. "field": "age",
  11. "ranges": [
  12. {
  13. "from": 15,
  14. "to": 20
  15. },
  16. {
  17. "from": 20,
  18. "to": 25
  19. },
  20. {
  21. "from": 25,
  22. "to": 30
  23. }
  24. ]
  25. }
  26. }
  27. }
  28. }

Metric Aggregations  的api 介绍

Avg Aggregation  #计算出字段平均值

做聚合分析,应该讲size 设置为0,否则会返回查询结果。写20,aggs的相关结果会出现在比较后面而已

现在的需求是查询fromgu的人的平均年龄。


  1. POST zhifou/_search
  2. {
  3. "size": 0,
  4. "query": {
  5. "match": {
  6. "from": "gu"
  7. }
  8. },
  9. "aggs": {
  10. "age_ave": {
  11. "avg": {
  12. "field": "age"
  13. }
  14. }
  15. }
  16. }

上例中,首先匹配查询fromgu的数据。在此基础上做查询平均值的操作,这里就用到了聚合函数,其语法被封装在aggs中,而age_ave则是为查询结果起个别名,封装了计算出的平均值。那么,要以什么属性作为条件呢?是age年龄,查年龄的什么呢?是avg,查平均年龄。

2   Max Aggregation  #求最大值


  1. GET zhifou/_search
  2. {
  3. "aggs": {
  4. "my_max": {
  5. "max": {
  6. "field": "age"
  7. }
  8. }
  9. },
  10. "size": 0
  11. }

Min Aggregation #求最小值


  1. GET zhifou/_search
  2. {
  3. "aggs": {
  4. "my_min": {
  5. "min": {
  6. "field": "age"
  7. }
  8. }
  9. },
  10. "size": 0
  11. }

Sum Aggregation #求和


  1. "aggs" : {
  2. "intraday_return" : { "sum" : { "field" : "change" } }
  3. }

Stats Aggregation  #最大、最小、和、平均值。一起求出来


  1. GET zhifou/_search
  2. {
  3. "aggs": {
  4. "my_stats": {
  5. "stats": {
  6. "field": "age"
  7. }
  8. }
  9. },
  10. "size": 0
  11. }

Extended Stats Aggregation #字段的其他属性,包括最大最小,方差等等。


  1. GET zhifou/_search
  2. {
  3. "aggs": {
  4. "my_extended_stats": {
  5. "extended_stats": {
  6. "field": "age"
  7. }
  8. }
  9. },
  10. "size": 0
  11. }

Cardinality Aggregation#计算出字段的唯一值。相当于sql中的distinct


  1. {
  2. "aggs" : {
  3. "author_count" : {
  4. "cardinality" : {
  5. "field" : "author"
  6. }
  7. }
  8. }
  9. }

Geo Bounds Aggregation

计算出所有的地理坐标将会落在一个矩形区域。比如说朝阳区域有很多饭店,我就可以用一个矩形把这些饭店都圈起来,看看范围。


  1. {
  2. "query" : {
  3. "match" : { "business_type" : "shop" }
  4. },
  5. "aggs" : {
  6. "viewport" : {
  7. "geo_bounds" : {
  8. "field" : "location",
  9. "wrap_longitude" : true
  10. }
  11. }
  12. }
  13. }

Geo Centroid Aggregation

计算出所有文档的大概的中心点。比如说某个地区盗窃犯罪很多,那我这样就可以看到这片区域到底哪个点(街道)偷盗事件最猖狂。


  1. {
  2. "query" : {
  3. "match" : { "crime" : "burglary" }
  4. },
  5. "aggs" : {
  6. "centroid" : {
  7. "geo_centroid" : {
  8. "field" : "location"
  9. }
  10. }
  11. }
  12. }

10 Percentiles Aggregation

百分比统计。可以看出你网站的所有页面。加载时间的差异


  1. {
  2. "aggs" : {
  3. "load_time_outlier" : {
  4. "percentiles" : {
  5. "field" : "load_time"
  6. }
  7. }
  8. }
  9. }

11 Percentile Ranks Aggregation

看看15毫秒和30毫秒内大概有多少页面加载完。


  1. {
  2. "aggs" : {
  3. "load_time_outlier" : {
  4. "percentile_ranks" : {
  5. "field" : "load_time",
  6. "values" : [15, 30]
  7. }
  8. }
  9. }
  10. }

12 Top hits Aggregation


  1. {
  2. "aggs": {
  3. "top-tags": {
  4. "terms": {
  5. "field": "tags",
  6. "size": 3
  7. },
  8. "aggs": {
  9. "top_tag_hits": {
  10. "top_hits": {
  11. "sort": [
  12. {
  13. "last_activity_date": {
  14. "order": "desc"
  15. }
  16. }
  17. ],
  18. "_source": {
  19. "include": [
  20. "title"
  21. ]
  22. },
  23. "size" : 1
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }

13 alue Count Aggregation  #数量统计,看看这个字段一共有多少个不一样的数值。


  1. {
  2. "aggs" : {
  3. "grades_count" : { "value_count" : { "field" : "grade" } }
  4. }
  5. }

嵌套

在kabana导入 航空信息


  1. #查看航班目的地的统计信息,增加平均,最高最低价格
  2. GET kibana_sample_data_flights/_search
  3. {
  4. "size": 0,
  5. "aggs":{
  6. "flight_dest":{
  7. "terms":{
  8. "field":"DestCountry"
  9. },
  10. "aggs":{
  11. "avg_price":{
  12. "avg":{
  13. "field":"AvgTicketPrice"
  14. }
  15. },
  16. "max_price":{
  17. "max":{
  18. "field":"AvgTicketPrice"
  19. }
  20. },
  21. "min_price":{
  22. "min":{
  23. "field":"AvgTicketPrice"
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }
  30. #价格统计信息+天气信息
  31. GET kibana_sample_data_flights/_search
  32. {
  33. "size": 0,
  34. "aggs":{
  35. "flight_dest":{
  36. "terms":{
  37. "field":"DestCountry"
  38. },
  39. "aggs":{
  40. "stats_price":{
  41. "stats":{
  42. "field":"AvgTicketPrice"
  43. }
  44. },
  45. "wather":{
  46. "terms": {
  47. "field": "DestWeather",
  48. "size": 5
  49. }
  50. }
  51. }
  52. }
  53. }
  54. }

Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation的更多相关文章

  1. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  2. Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD

    原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...

  3. Es学习第九课, 聚合查询和复合查询

    ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum.最小值min.最大值max等等 我们就用上一课的数据作为参考来举例 聚合查询 sum聚合 sum是一个求累加值的聚合 ...

  4. Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板

    原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  5. Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer

    原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...

  6. Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍

    原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...

  7. Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)

    原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...

  8. Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

    原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  9. iOS 阶段学习第九天笔记(内存管理)

    iOS学习(C语言)知识点整理 一.内存管理 1)malloc , 用于申请内存; 结构void *malloc(size_t),需要引用头文件<stdlib.h>:在堆里面申请内存,si ...

随机推荐

  1. 【SaltStack官方版】—— job management

    JOB MANAGEMENT New in version 0.9.7. Since Salt executes jobs running on many systems, Salt needs to ...

  2. JS高阶函数--------map、reduce、filter

    一.filter filter用于对数组进行过滤.它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 注意: filter() 不会对空数组进行检测. 注意: filter() ...

  3. window7下docker toolbox 启用数据卷报错: Error response from daemon: invalid mode:

    场景:希望把d:\dockerShare文件夹作为数据卷 ,和docker中的centos镜像生成的容器关联. 原来的命令: docker run -d -it --name=edc-centos7 ...

  4. 设计模式之动态代理(Java的JDK动态代理实现)

    先来看一下思维导图: 对于JDK的动态代理,孔浩老师说学习的方法是把它记下来. 先写一个主题接口类,表示要完成的一个主题. package com.liwei.dynaproxy; /** * 要代理 ...

  5. #20175201张驰 实验三 敏捷开发与XP实践

    实验步骤 (一)敏捷开发与XP 一.敏捷开发与XP实践-1 ①实验要求: 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse ...

  6. cenos 7 中firewalld开放服务端口

    转载 CentOS 7 为firewalld添加开放端口及相关资料   1.运行.停止.禁用firewalld 启动:# systemctl start  firewalld 查看状态:# syste ...

  7. ajax工作原理,Jsonp原理

    Ajax工作原理是 相当于在用户和服务器之间加了-个中间层(AJAX引擎),使用户操作与服务器响应异步化. 对于用户请求ajax引擎会做一些数据验证和数据处理,不是所有请求都提交给服务器,当需要从服务 ...

  8. 【SVN】 一次SVN 修复笔记

    同事乱提交了一个版本之后,SVN上最新版本出现了问题. 原本按照网上其他人的说法,可以手动到服务器端干掉最新版的存档,并修改版本记录到前一个版本号即可,但是这应该是个坑. 掉进这个坑后,需要解决,又不 ...

  9. web.xml 通过contextConfigLocation配置spring 的方式

    部署到tomcat后,src目录下的配置文件会和class文件一样,自动copy到应用的 classes目录下 spring的 配置文件在启动时,加载的是web-info目录下的application ...

  10. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_19-ArrayList练习四_筛选集合

    大集合里面循环装了20个int类型的随即数字 下面要自定义方法,这个方法专门负责筛选 遍历偶数的集合 重点是集合当做方法的参数,还能当做集合的返回值