news 2026/1/18 10:01:37

Elasticsearch 聚合入门:像 Excel 透视表一样分析数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch 聚合入门:像 Excel 透视表一样分析数据

👋 你好,数据分析新手!

你是否熟悉 Excel 的透视表?它能轻松地对数据进行分组、求和、求平均,让你从一堆乱麻中快速看出端倪。

今天,我要告诉你一个好消息:Elasticsearch (ES) 也有一个“超级透视表”功能,它叫做“聚合 (Aggregation)”

如果说查询 (query) 是从 ES 的“图书馆”里找书,那么聚合 (aggregation) 就是对这些书进行统计分析,比如“哪个作者的书最多?”、“平均每本书有多少页?”。

这篇文章将带你用最直观的方式,入门 ES 的聚合功能。


🛠️ 聚合的“菜谱”:基本结构

和查询类似,聚合请求也有一个标准的 JSON 结构。我们同样通过_search端点发送,但这次我们把聚合指令放在aggs(aggregations 的缩写) 字段里。

# 基本结构GET /你的索引名称/_search{"size":0, // 设置为0,表示不返回具体文档,只返回聚合结果,更高效"aggs":{//"aggs""aggregations"的缩写"你给结果起的名字":{// 比如"avg_price""聚合类型":{// 比如"avg""字段":"字段名"// 比如"price"}}}}

别担心,下面的例子会让这个“菜谱”变得生动起来。


🧩 核心聚合类型:你的“数据积木”

聚合主要分为两大类,理解了它们,你就理解了聚合的精髓。

1. 桶聚合 (Bucket Aggregation) - “分组”

这是什么?
桶聚合就像 Excel 透视表里的“行”或“列”,它负责将数据分门别类地放进不同的“桶”里。例如,按“商品类别”分组,每个类别就是一个“桶”。

最常用的桶聚合:terms
terms聚合会为你统计每个“桶”里有多少文档。

场景: 统计一个“商品”索引中,每个**类别(category)**下有多少商品。

GET/products/_search{"size":0,"aggs":{"products_by_category":{// 我们给这个聚合结果起个名字"terms":{"field":"category.keyword"// 按 category 字段分组}}}}
  • category.keyword: 通常对文本字段进行分组时,我们使用.keyword后缀,以确保 ES 对整个词进行精确分组,而不是分词。

返回结果可能像这样

{..."aggregations":{"products_by_category":{"buckets":[{"key":"电子产品","doc_count":150},{"key":"家居用品","doc_count":80},{"key":"图书","doc_count":200}]}}}

看,是不是很清晰?ES 告诉你,“电子产品”这个桶里有150个商品,“家居用品”有80个。这就像透视表的行标签和计数!

2. 指标聚合 (Metrics Aggregation) - “计算”

这是什么?
指标聚合就像 Excel 透视表里的“值”区域,它负责对放进“桶”里的数据进行数学计算。例如,求平均值、总和、最大值、最小值等。

常用的指标聚合

  • avg:计算平均值
  • sum:计算总和
  • max/min:计算最大/最小值
  • cardinality:计算不重复值的数量(类似COUNT(DISTINCT column)

场景: 计算所有商品的平均价格(price)

GET/products/_search{"size":0,"aggs":{"average_price":{// 结果名"avg":{// 聚合类型:平均值"field":"price"// 要计算的字段}}}}

返回结果可能像这样

{..."aggregations":{"average_price":{"value":256.8// 直接返回计算出的值}}}

🚀 组合起来!像透视表一样工作

现在,让我们把“桶”和“指标”组合起来,完成一个真正的“透视表”操作。

终极场景统计每个商品类别下的平均价格是多少?

这就像在 Excel 透视表里:

  • :商品类别 (Category) ->terms桶聚合
  • :价格的平均值 (Average of Price) ->avg指标聚合

ES 查询语句

GET/products/_search{"size":0,"aggs":{"avg_price_by_category":{// 第一层聚合:按类别分组(桶)"terms":{"field":"category.keyword"},"aggs":{// 在每个类别的“桶”内部,再进行子聚合"avg_price":{// 给子聚合起个名字"avg":{// 子聚合类型:计算平均值"field":"price"}}}}}}

返回结果可能像这样

{..."aggregations":{"avg_price_by_category":{"buckets":[{"key":"电子产品",// 桶1:电子产品"doc_count":150,"avg_price":{"value":1200.50}// 桶1的平均值},{"key":"家居用品",// 桶2:家居用品"doc_count":80,"avg_price":{"value":150.00}// 桶2的平均值},{"key":"图书",// 桶3:图书"doc_count":200,"avg_price":{"value":45.80}// 桶3的平均值}]}}}

这不就是你想要的透视表结果吗?!清晰、直观,一目了然。


💡 总结与下一步

恭喜你!你已经掌握了 ES 聚合的核心思想:

  1. 桶聚合 (terms):像透视表的行/列,用来分组
  2. 指标聚合 (avg,sum等):像透视表的,用来计算
  3. 组合使用:在桶聚合内部嵌套指标聚合,实现强大的分层分析。

你的入门实践路径

  1. 打开 Kibana 的Dev Tools
  2. 找一个你熟悉的索引(比如网站日志、商品数据等)。
  3. 尝试用terms聚合对某个字段(如国家、城市、分类)进行分组。
  4. 再尝试在分组的基础上,计算某个数值字段(如价格、访问量)的平均值或总和。

ES 的聚合功能远不止于此,还有日期直方图 (date_histogram)、过滤 (filter)、嵌套聚合等更高级的玩法。但掌握了今天的“桶+指标”组合,你已经能解决 80% 的数据分析需求了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/7 21:33:05

6、日期时间与算法数据结构问题及解决方案

日期时间与算法数据结构问题及解决方案 1. 日期与时间问题概述 在处理日期和时间相关的编程任务时,我们常常会遇到一些常见的问题,下面将对这些问题进行详细介绍,并给出相应的解决方案。 1.1 问题列表 问题编号 问题描述 39 测量函数执行时间 40 计算两个日期之间的…

作者头像 李华
网站建设 2026/1/7 2:04:53

普渡大学将AI能力列为本科毕业必备要求

普渡大学上周宣布,将要求入学的本科生达到"AI工作能力"要求才能毕业。这项尚未明确定义的要求是更广泛AI战略的一部分,将于2026年秋季起适用于该校印第安纳波利斯主校区和印第安纳州西拉斐特校区的新生。普渡大学校长Mung Chiang在声明中表示&…

作者头像 李华
网站建设 2026/1/14 23:48:12

13、数据处理与图像生成的实用编程技巧

数据处理与图像生成的实用编程技巧 在编程领域,处理文件压缩、图像生成以及数据库操作是常见的任务。下面将详细介绍相关的编程实现方法。 1. ZIP 档案操作 在处理 ZIP 档案时,有多种库可供选择,这里选用了 ZipLib,它是一个轻量级、开源的跨平台 C++11 库,依赖于标准库…

作者头像 李华
网站建设 2025/12/25 18:24:53

Nas-Cab 让文件管理更简单,cpolar远程访问让数据随身带

文章目录前言1. Windows 安装 Nas-Cab2. 本地局域网连接 Nas-Cab3. 安装 Cpolar 内网穿透4. 固定 Nas-Cab 公网地址这样的组合让个人存储系统更实用,数据访问不受地点约束,无论是工作还是生活都更便捷。前言 Nas-Cab 是一款轻量级存储管理工具&#xff…

作者头像 李华
网站建设 2026/1/18 8:39:01

基于java的SpringBoot/SSM+Vue+uniapp的户外救援系统的详细设计和实现(源码+lw+部署文档+讲解等)

文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言 🌞博主介绍:✌全网粉丝15W,CSDN特邀作者、211毕业、高级全…

作者头像 李华
网站建设 2025/12/26 6:03:08

【毕业设计】基于springboot+微信小程序的影院售票系统设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华