在上一篇文章中,我们介绍了《大数据搜索与可视化分析(8)kibana入门教程-2-Discover》,本文学习elasticsearch聚合分析,是对《大数据搜索与可视化分析(3)elasticsearch查询进阶-2》中聚合函数的扩展。

首先举一个生活中的例子,如下图是京东的搜索界面,在搜索框中输入“华为”进行搜索,就会得到如图界面,搜索框就是我们常用的搜索功能,而下面这些,比如分类、热点、操作系统、CPU 类型等是根据 ES 的聚合分析获得的相关结果。

图片参考文章《Elasticsearch 之聚合分析入门 https://www.cnblogs.com/wupeixuan/p/12549336.html》

  • 聚合的定义

ES 除了搜索以外,还提供针对 ES 数据进行统计分析的功能,也就是聚合,它的特点是实时性非常高,所有的计算结果都是即时返回的,而 Hadoop 等大数据系统得到一个统计结果需要一天的时间,一般都是 T + 1 级别的。

通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档,比如海淀区和东城区的客房数量,不同价格区间,可预订的经济型酒店和商务型酒店的数量,这样可以帮助我们过滤搜索的结果,这样的优点是性能高,只需要一条语句,就可以从 ES 得到分析结果,无需再客户端自己去实现分析逻辑。

在 ES 的聚合中主要一共分为四大类:

  • Bucket Aggregation:分桶类型,一些列满足特定条件的文档的集合

  • Metric Aggregation:指标分析类型,一些数学运算,可以对文档字段进行统计分析,比如计算最大值、最小值、平均值等

  • Pipeline Aggregation:管道分析类型,对其他聚合结果进行二次聚合

  • Matrix Aggregation:矩阵分析类型,支持对多个字段的操作并提供一个结果矩阵

  • Metric Aggregation

Metric 是基于数据集计算的结果,除了支持在字段上进行计算,同样也支持在脚本产生的结果之上进行计算。Metric 主要分为单值分析和多值分析,具体内容如下:

  • 单值分析,只输出一个分析结果:

  • Min、Max、Avg、Sum

  • Cardinality

其中,Min、Max、Avg、Sum 这些很容易理解,在这里说一下 Cardinality,它是指不同数值的个数,相当于 SQL 中的 distinct。

  • 多值分析,输出多个分析结果:

  • Stats、Extended Stats

  • Percentiles、Percentile Ranks

  • Top Hits

在进行聚合分析之前,首先插入样例数据

POST test_aggregation/_bulk{"index":{"_id":"1"}}{"username":"曹操","job":"主公","age":50,"birth":"1900-01-01","isMarried":true,"salary":100}{"index":{"_id":"2"}}{"username":"曹丕","job":"主公","age":28,"birth":"1980-05-07","isMarried":true,"salary":30}{"index":{"_id":"3"}}{"username":"荀彧","job":"军师","age":22,"birth":"1985-08-07","isMarried":false,"salary":15}{"index":{"_id":"4"}}{"username":"司马懿","job":"军师","age":23,"birth":"1989-08-07","isMarried":false,"salary":8}{"index":{"_id":"5"}}{"username":"典韦","job":"武士","age":18,"birth":"1994-08-07","isMarried":false,"salary":5}{"index":{"_id":"6"}}{"username":"许褚","job":"武士","age":26,"birth":"1987-08-07","isMarried":false,"salary":12}

单值分析的Min、Max、Avg、Sum四个聚合函数,已在《大数据搜索与可视化分析(3)elasticsearch查询进阶-2》文章中介绍,读者可自行点击查阅,本文从单值的Cardinality开始介绍。

  • Cardinality

如我们对职业进行Cardinality聚合分析,通过前面插入的数据可以看到,去重后有三种职业,分别为主公,军师,武士,我们通过查询语句来看一下

GET test_aggregation/_search{  "aggs": {    "count_of_job": {      "cardinality": {        "field": "job.keyword"      }    }  }}

查询结果:

  "aggregations" : {    "count_of_job" : {      "value" : 3    }  }}
  • Stats 

接下来看多值分析,前面提到过,Stats 是做多样的数据分析,可以一次性得到最大值、最小值、平均值、中值等数据,接下来我们来看看效果:

GET test_aggregation/_search{  "aggs": {    "stats_age": {      "stats": {        "field": "age"      }    }  }

执行结果:

aggregations" : {    "stats_age" : {      "count" : 6,      "min" : 18.0,      "max" : 50.0,      "avg" : 27.833333333333332,      "sum" : 167.0    }  }
  • Extended Stats

Extended Stats 是对 Stats 的扩展,包含了更多的统计数据,比如方差、标准差等

GET test_aggregation/_search{  "aggs": {    "extended_stats_age": {      "extended_stats": {        "field": "age"      }    }  }}

执行结果:

"aggregations" : {    "extended_stats_age" : {      "count" : 6,      "min" : 18.0,      "max" : 50.0,      "avg" : 27.833333333333332,      "sum" : 167.0,      "sum_of_squares" : 5297.0,      "variance" : 108.13888888888884,      "std_deviation" : 10.39898499320433,      "std_deviation_bounds" : {        "upper" : 48.63130331974199,        "lower" : 7.035363346924672      }    }  }
  • Percentiles 和 Percentile Ranks 

Percentiles 和 Percentile Ranks 是百分位数的一个统计

  • Percentiles

GET test_aggregation/_search{  "aggs": {    "percentile_age": {      "percentiles": {        "field": "age"      }    }  }}

执行结果:

"aggregations" : {    "percentile_age" : {      "values" : {        "1.0" : 18.0,        "5.0" : 18.0,        "25.0" : 22.0,        "50.0" : 24.5,        "75.0" : 28.0,        "95.0" : 50.0,        "99.0" : 50.0      }    }  }
  • Percentile Ranks

GET test_aggregation/_search{  "aggs": {    "percentile_ranks_ages": {      "percentile_ranks": {        "field": "age",        "values": [          18,          28        ]      }    }  }}

输出结果

"aggregations" : {    "percentile_ranks_ages" : {      "values" : {        "18.0" : 8.333333333333332,        "28.0" : 68.05555555555554      }    }  }
  • top_hits

Top Hits 一般用于分桶后获取桶内最匹配的顶部文档列表,即详情数据。

GET test_aggregation/_search{  "size": 0,  "aggs": {    "jobs": {      "terms": {        "field": "job.keyword",        "size": 10      },      "aggs": {        "top_employee": {          "top_hits": {            "size": 10,            "sort": [              {                "age": {                  "order": "desc"                }              }              ]          }        }      }    }  }}

部分输出结果

{          "key" : "主公",          "doc_count" : 2,          "top_employee" : {            "hits" : {              "total" : {                "value" : 2,                "relation" : "eq"              },              "max_score" : null,              "hits" : [                {                  "_index" : "test_aggregation",                  "_type" : "_doc",                  "_id" : "1",                  "_score" : null,                  "_source" : {                    "username" : "曹操",                    "job" : "主公",                    "age" : 50,                    "birth" : "1900-01-01",                    "isMarried" : true,                    "salary" : 100                  },                  "sort" : [                    50                  ]                },                {                  "_index" : "test_aggregation",                  "_type" : "_doc",                  "_id" : "2",                  "_score" : null,                  "_source" : {                    "username" : "曹丕",                    "job" : "主公",                    "age" : 28,                    "birth" : "1980-05-07",                    "isMarried" : true,                    "salary" : 30                  },                  "sort" : [                    28                  ]                }              ]            }          }        }

更多大数据搜索与可视化分析讲解,可点击原文查看。

聚合中返回source_大数据搜索与可视化分析(9)elasticsearch聚合分析Metric Aggregation...相关推荐

  1. 大数据搜索不只开源Elastic,星环科技自研New Search青出于蓝

    大数据产业创新服务媒体 --聚焦数据 · 改变商业 1月15日,全球著名的大数据搜索与实时处理公司Elastic公司CEO Shay Banon突然发文宣布,Elasticsearch和Kibana的 ...

  2. 2021年大数据ELK(五):Elasticsearch中的核心概念

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Elasticsearch中的核心概念 一.索引 index 二 ...

  3. python大数据搜索_python语言-用 Python 实现一个大数据搜索引擎

    搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器 ...

  4. 大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk

    2019独角兽企业重金招聘Python工程师标准>>> 本文就架构,功能,产品线,概念等方面就ElasticSearch和Splunk做了一下全方位的对比,希望能够大家在制定大数据搜 ...

  5. Paper Pal:一个中英文论文及其代码大数据搜索平台

    点击上方蓝字关注我们 Paper Pal:一个中英文论文及其代码大数据搜索平台 余万, 付聿炜, 熊贇, 朱扬勇 1 引言 在开展科研工作的过程中,科研人员需要从大量实时更新的论文中持续地跟踪学术界前 ...

  6. 【ElasticSearch】大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk

    1.概述 转载:大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk述 本文就架构,功能,产品线,概念等方面就ElasticSearch和Splunk做了一下全方位的对比,希望 ...

  7. 大数据时代之大数据搜索与挖掘

    在企业日益发展的今天,数据.文档.资料的不断扩充,大大增加了我们查找搜索的难度,如何才能在最短时间找到我们需要的资料成为大型企业经常遇到的问题,我们统称这些为大数据搜索.(www.lingjoin.c ...

  8. python大数据搜索_【大数据搜索】JZSearch大数据搜索引擎

    大数据的特点有四个层面:第一,数据体量巨大.从TB级别,跃升到PB级别:第二,数据类型繁多.网络日志.视频.图片.地理位置信息等等.第三,价值密度低.以视频为例,连续不间断监控过程中,可能有用的数据仅 ...

  9. 【学习笔记】大数据搜索与挖掘

    第一章 绪论 "我们虽然淹没在信息的海洋中,但是却渴求所需的知识."   美国作家,奈斯比特<大趋势>. 为什么会出现这种情况呢?主要原因之一是缺乏有效的大数据搜索.挖 ...

最新文章

  1. 小学教师计算机国培培训总结,小学教师国培个人研修总结
  2. 【Python进阶】Python进阶专栏、编程与开源框架知识星球上线,等你来follow
  3. 针对WildFly和EAP运行Java Mission Control和Flight Recorder
  4. unity3d UGUI视频教程
  5. pandas - pd.date_range-生成时间索引
  6. JavaSE|StringBuffer
  7. 推荐一款我私藏已久的串口示波神器
  8. si446使用记录(一):基本资料获取
  9. SonarQube检测出的bug、漏洞以及异味的修复整理,最新java技术栈
  10. 微博平台的RPC服务化实践
  11. 使用python获取win10锁屏照片
  12. 计算机adminstor用户不见了,Win10管理员账户不见了如何用Administrator登录
  13. 深圳中学招聘太激烈,不是名校博士别想挤破头进去!
  14. 源译识 | 征集开源许可证中文译文,欢迎大家译起来!
  15. 学习JBPM 工作流引擎 API方法(二)
  16. python socket通信 心跳_python socket 编程之三:长连接、短连接以及心跳(转药师Aric的文章)...
  17. 添加遮罩层,实现点击穿透,实现遮罩层按钮点击,遮罩层下层点击事件
  18. golang websocket 一个语音聊天室
  19. CDA_Level 1_学习笔记2
  20. 报错:attributes are not compatible with the provided attributes

热门文章

  1. iOS中创建,使用动态库(dylib)
  2. 使用DataTable动态绑定GridView
  3. LeetCode--256. 粉刷房子(动态规划)
  4. CVPR2013一些论文集合供下载(visual tracking相关)
  5. HTTP Status Code(Http状态码)
  6. 计网期末复习 - CRC循环冗余校验计算
  7. 项目部署—Linux命令安装redis
  8. php gzip乱码,php file_get_contents抓取Gzip网页乱码的三种解决方法
  9. 响应面法求可靠度指标代码_基于可靠度理论的既有桥梁结构承载能力评估——结构可靠度理论若干基本概念...
  10. MTK(android init.rc) 写一个开机启动的服务