大家好,我是Edison。

上一篇:ES的Query DSL

什么是ES的聚合

Elastic除搜索之外,还提供针对ES数据的统计分析功能,具有较高的实时性。

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

例如,我们可以通过聚合得到一个旅游网站的以下数据:

  • 地区A 和 地区B 的客房数量

  • 不同的价格区间,可以预定的经济性酒店和舒适型酒店的数量

使用ES聚合,我们只需要一条语句,就可以从ES得到分析的结果,无需在客户端去实现。在Kibana中,大量的可视化报表其实都是采用了ES的聚合分析来得到的数据结果。

ES聚合的分类

ES中常见的聚合有如下几类:

  • Bucket Aggregation - 一些列满足特定条件的文档集合

  • Metric Aggregation - 一些数学运算,可以对文档字段进行统计分析

  • Pipeline Aggregation - 对其他的聚合结果进行二次聚合

  • Matrix Aggregation - 支持对多个字段的操作并提供一个结果矩阵

那么,接下来,我们就一起来看看最常用的Bucket & Metric聚合。

Bucket & Metric

这里我们直接用我们都很熟悉的SQL语句来理解Bucket和Metric:

Metric就类似于SQL中的一些聚合函数方法,主要对数据集进行计算。

大多数Metric是数学计算,仅仅输出一个值,如:min / max / sum / avg / cardinality

少部分Metric支持输出多个数值,如:stats / percentiles / percentile_ranks

Bucket就类似于SQL中对数据进行分组,主要指满足一定条件的文档集合。

我们可以借助Bucket实现数据的分桶,例如可以实现酒店的高档、中档和低档的分桶,也可以在高档的分组下再分为好评、中评和差评三个分桶。

ES中提供了多种类型的Bucket,例如 Term & Range,可以让我们轻松地实现时间 / 年龄区间 / 地理位置的分桶。

下面我们来看一个Bucket的例子:

查看航班目的地的统计信息

分桶字段:DestCountry (目的地)

// 按照字段的Terms进行分桶
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"flight_dest": {
"terms": {
"field": "DestCountry"
}
}
}
}

统计结果如下图所示:

可以从结果图中看出,ES返回了以航班目的地为分组的的Buckets(分桶),IT(意大利)的航班有2371次,US(美丽国)的航班有1987次...

下面我们来看一个加入Metirc的例子:

查看航班目的地的统计信息,并增加均价、最高价 和 最低价的统计

这里我们就可以使用ES提供的数学计算Metrics了

GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"flight_dest": {
"terms": {
"field": "DestCountry"
},
"aggs": {
// 自定义名字为 avaerage_price
"average_price": {
// 使用 avg metric
"avg": {
"field": "AvgTicketPrice"
}
},
// 自定义名字为 max_price
"max_price": {
// 使用 max metric
"max": {
"field": "AvgTicketPrice"
}
},
// 自定义名字为 min_price
"min_price": {
// 使用 min metric
"min": {
"field": "AvgTicketPrice"
}
}
}
}
}
}

统计结果如下图所示:

可以从结果图中看出,ES在之前分组统计的基础上,还把平均价格、最高价和最低价都统计出来了。

相信到这里,你已经初步了解基本的统计分析了。

聚合嵌套

如果想要在上面的聚合统计基础之上,再做进一步的详细分析,我们就可以使用聚合嵌套。

还是以上面的示例为基础,我们想要:

查看航班目的地的统计信息,平均票价,以及天气情况

天气情况是基于之前对航班目的地的聚合统计的基础之上,做的二次聚合,类似于在第一个Bucket中再分几个Bucket,这个就是聚合嵌套。

GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"flight_dest": {
"terms": {
"field": "DestCountry"
},
"aggs": {
"average_price": {
"avg": {
"field": "AvgTicketPrice"
}
},
// 聚合嵌套
"weather": {
"terms": {
"field": "DestWeather"
}
}
}
}
}
}

统计结果如下图所示:

可以看到,ES在以航班目的地为分组的Bucket下,又为我们分出了多个Bucket,这些嵌套的Bucket就是我们想要统计的天气情况。比如,图中航班目的地为CN(中国)的天气情况中,Sunny(晴朗)天气的记录有209条,而Rain(下雨)天气的记录有207条。

小结

本篇,我们了解了ElasticSearch的聚合的概念,以及两个重要的聚合 Bucket & Metric。通过一个查询实例,我们了解了如何使用 Bucket & Metric 进行最基本的统计分析,ES的聚合还支持嵌套,还是很强大的!

参考资料

极客时间,阮一鸣,《ElasticSearch核心技术与实战

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

Elastic学习之旅 (7) 聚合分析的更多相关文章

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

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

  2. Elasticsearch 之聚合分析入门

    本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合. 首先来看下聚合(Aggregation): 什么是 Aggregati ...

  3. ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    一.Index Template与Dynamic Template的概念 1.Index Template:它是用来根据提前设定的Mappings和Settings,并按照一定的规则,自动匹配到新创建 ...

  4. Elasticsearch 6.x版本全文检索学习之聚合分析入门

    1.什么是聚合分析? 答:聚合分析,英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能.特点如下所示: a.功能丰富,提供Bucket.Metric.Pipeline等 ...

  5. Elasticsearch学习笔记(三)聚合分析Agg

    一.设置fielddata PUT /index/_mapping/type {     "properties":{          "fieldName" ...

  6. Elasticsearch学习之深入聚合分析四---案例实战

    1. 需求:比如有一个网站,记录下了每次请求的访问的耗时,需要统计tp50,tp90,tp99 tp50:50%的请求的耗时最长在多长时间tp90:90%的请求的耗时最长在多长时间tp99:99%的请 ...

  7. Elasticsearch学习之深入聚合分析三---案例实战

    1. 统计指定品牌下每个颜色的销量 任何的聚合,都必须在搜索出来的结果数据中进行,搜索结果,就是聚合分析操作的scope GET /tvs/sales/_search { , "query& ...

  8. Elasticsearch学习之深入聚合分析二---案例实战

    以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析,首先建立电视销售的索引,然后 添加几条销售记录 PUT /tvs { "mappin ...

  9. Elasticsearch学习之深入聚合分析一---基本概念

    首先明白两个核心概念:bucket和metric 1. bucket:一个数据分组 city name 北京 小李 北京 小王 上海 小张 上海 小丽 上海 小陈 基于city划分buckets,划分 ...

  10. Elastic Stack 笔记(七)Elasticsearch5.6 聚合分析

    博客地址:http://www.moonxy.com 一.前言 Elasticsearch 是一个分布式的全文搜索引擎,索引和搜索是 Elasticsarch 的基本功能.同时,Elasticsear ...

随机推荐

  1. 【uniapp】文本控件多余文字省略号代替

    多余文字使用省略号效果 代码 .l-dd-content{ width: 100%; color: #8b8b8b; display: -webkit-box; /** 对象作为伸缩盒子模型显示 ** ...

  2. 无需WebView,Vue也能开发跨平台桌面应用

    前言 一直以来,使用Vue开发桌面应用大部分都是使用基于webview的方案,如electron,tauri等.不依赖webview的,移动端倒有不少,如Weex,NativeScript等,桌面端寥 ...

  3. python的typer写cli脚本如此简单

    # typer_demo.py import typer from pathlib import Path from typing import Optional from typing_extens ...

  4. 💻开源项目介绍-NewsNow-优雅的实时新闻聚合平台

    news.zktww.vip 引言 在信息洪流中,如何优雅地获取新闻? 在当今信息爆炸的时代,我们每天需要在微博.知乎.Twitter.GitHub等平台间频繁切换,才能捕捉到最新的热点动态. New ...

  5. vue3在构建时,使用魔法糖语法时defineProps和defineEmits的注意事项

    在 Vue 3.2+ 版本中,可以使用 <script setup> 替代传统的 script标签来编写组件,它提供了更简洁的语法来编写 Composition API 代码. 在 < ...

  6. jmeter使用时报错问题

    一.打开时命令行提示按任意键继续图形界面无法打开 如图,打开时jmeter命令行报错 根据报错内容,是Java没有安装好. jdk安装好后,需要在环境变量中配置. 但是jdk安装配置好后打开还是报错, ...

  7. Composer的常用命令和关于在哪儿查看composer可用包列表的问题

    1.安装: composer的安装就不用多说了,官网下载,一路next 中途貌似要让选择php.exe的所在目录. 2.常用命令: 1).配置/取消国内镜像仓库 /*配置国内镜像*/ composer ...

  8. NPOI,给指定的excle创建个下拉框验证

    NPOI,给指定的excle创建个下拉框验证 先大致看下效果吧 Nuget  搜索 NPOI,一般出来的第一个就是,安装NPOI基础环境 1 using NPOI.HSSF.UserModel; 2 ...

  9. kubelet 创建 Pod 前发生了什么?

    Kubelet Watch 到新增的 Pod,需要做的主要有以下几件事: 管理 Pod 状态,除了更新本地缓存,还要同步给 API server 计算节点的资源是否足够创建 Pod 创建 Cgroup ...

  10. ArcGIS Desktop 10.7 完美汉化安装教程

    1,下载文件并解压缩,双击[Esri ArcGIS Desktop v10.7.0.exe] 2.在安装向导中选择[Next] 3.选中[I accept the master agreement]我 ...