当前位置: 首页 > news >正文

实战精讲:如何在Elasticsearch中进行数据的聚合分析

实战精讲:如何在Elasticsearch中进行数据的聚合分析

    • 一、聚合分析定义:什么是ES聚合分析?
      • 聚合分析核心流程图
    • 二、聚合分析核心分类:两大基础类型
      • 聚合类型关系图
    • 三、基础环境准备:测试数据
      • 3.1 创建索引
      • 3.2 插入测试数据
    • 四、指标聚合(Metric):数值计算(基础)
      • 4.1 定义:指标聚合
      • 4.2 常用语法
      • 实战:统计员工薪资相关指标
    • 五、桶聚合(Bucket):分组统计(最常用)
      • 5.1 定义:桶聚合
      • 5.2 常用分组方式
      • 实战1:按城市分组(terms)
      • 实战2:按年龄范围分组(range)
    • 六、聚合嵌套:分组 + 计算(企业实战必备)
      • 定义:嵌套聚合
      • 聚合嵌套流程图
      • 实战:按部门分组,统计每组平均薪资
    • 七、多级嵌套聚合:三层/四层分组(高级)
      • 实战:按城市 → 按部门 → 统计平均薪资
    • 八、带查询条件的聚合:先筛选,再分析
      • 场景:只统计**北京**地区的员工数据
    • 九、高级聚合:日期直方图(时间统计)
      • 场景:按天/周/月统计订单量、日志量
    • 十、聚合分析常用语法总结表
    • 十一、聚合分析最佳实践
    • 十二、总结

🌺The Begin🌺点点关注,收藏不迷路🌺

一、聚合分析定义:什么是ES聚合分析?

Elasticsearch聚合分析:是ES除搜索外最核心的能力,指对检索到的数据进行分组、统计、计算、求和、平均值、最大值、最小值、百分位等分析操作,等价于MySQL中的GROUP BY+聚合函数,但性能远超传统数据库,千万级数据可秒级出统计结果

简单理解:搜索是找数据,聚合是算数据

聚合分析核心流程图

设置查询条件

执行聚合分组

执行指标计算

返回统计结果

可视化展示


二、聚合分析核心分类:两大基础类型

ES聚合分为2大类,所有复杂聚合都由它们组合而成:

  1. Bucket(桶聚合):分组聚合
    按照条件将数据分到不同“桶”中,等价于GROUP BY
    例:按城市分组、按年龄分组、按日期分组

  2. Metric(指标聚合):计算聚合
    对分组后的数据进行数值计算,输出统计结果
    例:求和、平均值、最大值、数量统计

聚合类型关系图

渲染错误:Mermaid 渲染失败: Parse error on line 2: ...分析] --> B[Bucket 桶聚合(分组)] A --> C[Me -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

三、基础环境准备:测试数据

3.1 创建索引

PUT/employee{"mappings":{"properties":{"name":{"type":"text"},"age":{"type":"integer"},"city":{"type":"keyword"},"salary":{"type":"double"},"department":{"type":"keyword"}}}}

3.2 插入测试数据

POST/employee/_bulk{"index":{"_id":1}}{"name":"张三","age":25,"city":"北京","salary":8000,"department":"技术部"}{"index":{"_id":2}}{"name":"李四","age":30,"city":"上海","salary":12000,"department":"技术部"}{"index":{"_id":3}}{"name":"王五","age":28,"city":"北京","salary":10000,"department":"产品部"}{"index":{"_id":4}}{"name":"赵六","age":35,"city":"深圳","salary":15000,"department":"产品部"}{"index":{"_id":5}}{"name":"钱七","age":26,"city":"上海","salary":9000,"department":"运营部"}

四、指标聚合(Metric):数值计算(基础)

4.1 定义:指标聚合

对字段进行数值计算,不分组,直接输出统计结果。

4.2 常用语法

  1. value_count:统计数量
  2. sum:求和
  3. avg:平均值
  4. max:最大值
  5. min:最小值

实战:统计员工薪资相关指标

GET/employee/_search{"size":0,// 不返回原始数据,只看聚合结果"aggs":{// 聚合固定关键字"salary_stats":{// 自定义聚合名称"stats":{// 多值统计(包含sum/avg/max/min/count)"field":"salary"}}}}

五、桶聚合(Bucket):分组统计(最常用)

5.1 定义:桶聚合

按照字段值、范围、日期、关键词对数据分组。

5.2 常用分组方式

  1. terms:按字段精确值分组(最常用)
  2. range:按数值范围分组
  3. date_range:按日期范围分组
  4. histogram:直方图分组

实战1:按城市分组(terms)

GET/employee/_search{"size":0,"aggs":{"group_by_city":{// 自定义分组名"terms":{// 按值分组"field":"city",// 分组字段"size":10// 显示前10组}}}}

实战2:按年龄范围分组(range)

GET/employee/_search{"size":0,"aggs":{"group_by_age":{"range":{"field":"age","ranges":[{"to":25},// <25{"from":25,"to":30},// 25-30{"from":30}// >30]}}}}

六、聚合嵌套:分组 + 计算(企业实战必备)

定义:嵌套聚合

分组(Bucket),再对每组数据计算指标(Metric),是工作中最常用的聚合方式。

聚合嵌套流程图

按部门分组

技术部

产品部

运营部

计算平均薪资

计算平均薪资

计算平均薪资

实战:按部门分组,统计每组平均薪资

GET/employee/_search{"size":0,"aggs":{"group_by_dept":{// 第一层:桶聚合(分组)"terms":{"field":"department"},"aggs":{// 第二层:指标聚合(计算)"avg_salary":{"avg":{"field":"salary"}}}}}}

七、多级嵌套聚合:三层/四层分组(高级)

实战:按城市 → 按部门 → 统计平均薪资

GET/employee/_search{"size":0,"aggs":{"group_by_city":{// 第一层:按城市"terms":{"field":"city"},"aggs":{"group_by_dept":{// 第二层:按部门"terms":{"field":"department"},"aggs":{"avg_salary":{// 第三层:算薪资"avg":{"field":"salary"}}}}}}}}

八、带查询条件的聚合:先筛选,再分析

场景:只统计北京地区的员工数据

GET/employee/_search{"query":{// 先查询过滤"term":{"city":"北京"}},"size":0,"aggs":{"group_by_dept":{"terms":{"field":"department"},"aggs":{"avg_salary":{"avg":{"field":"salary"}}}}}}

九、高级聚合:日期直方图(时间统计)

场景:按天/周/月统计订单量、日志量

GET/order/_search{"size":0,"aggs":{"sales_per_month":{"date_histogram":{"field":"create_time","calendar_interval":"month"// 按月分组}}}}

十、聚合分析常用语法总结表

聚合类型关键字作用场景
指标聚合sum求和薪资总和、销售额
指标聚合avg平均值平均薪资、平均价格
指标聚合max/min最大/最小值最高工资、最低价
桶聚合terms按值分组按城市、部门、分类
桶聚合range按范围分组年龄区间、价格区间
桶聚合date_histogram按时间分组按月/日统计
组合aggs嵌套先分组后计算企业级报表

十一、聚合分析最佳实践

  1. 关闭原始数据返回:必须加"size": 0,大幅提升性能
  2. 字段类型要求:分组字段必须是keyword,不能是text
  3. 先过滤后聚合:用query缩小数据范围,聚合更快
  4. 避免深度分页:聚合结果默认返回10条,可通过size调整
  5. 性能优先:能用filter不用query,能term不用match

十二、总结

  1. 两大核心:Bucket(分组)+ Metric(计算)
  2. 基础用法:单分组、单计算
  3. 高级用法:多层嵌套聚合、带条件聚合、时间聚合
  4. 核心价值:秒级实现海量数据统计分析,支撑数据大屏、运营报表、可视化平台

ES聚合分析是大数据统计、企业运营分析、日志监控的核心技术,掌握本文内容可直接应对企业级聚合开发需求。



🌺The End🌺点点关注,收藏不迷路🌺
http://www.jsqmd.com/news/671194/

相关文章:

  • 用智能指针实现的、线程安全的、可复用的 内存池
  • Windows电脑上直接运行安卓应用?APK安装器终极解决方案
  • 解密QQ音乐加密音频:qmc-decoder工具完全指南
  • EF Core 10向量搜索插件安装失败?92%开发者忽略的3个.NET SDK版本陷阱(.NET 8.0.400+强制要求,旧版将静默降级为L2距离)
  • 【Dify 2026文档解析权威白皮书】:首次公开3大底层解析引擎重构逻辑与实测性能跃升47%的工程细节
  • fre:ac音频转换器终极指南:免费、高效、跨平台的音频处理解决方案
  • Kotlin 协程 - 在Android中的使用
  • 浏览器Cookie本地导出终极指南:Get cookies.txt LOCALLY完全解析
  • 当缠论遇上自动化:我如何用开源插件让技术分析变得更直观
  • RunFilesBuilder 项目安装与配置指南
  • 题解:洛谷 AT_abc355_c [ABC355C] Bingo 2
  • Dify工作流引擎演进史(2024→2026核心跃迁图谱):从YAML硬编码到可视化DSL+动态条件路由的工程化革命
  • 多页pdf怎么拆分成单页?5种高效方法,新手不用求人
  • 手把手教你用STM32CubeMX和FreeModbus搭一个完整的Modbus RTU主从测试环境
  • 题解:AcWing 278 数字组合
  • 创新实训(二)——FastAPI后端登录注册功能实现及前后端连接
  • 3 shell脚本编程
  • C语言数组实战:避开‘暴力模拟’的坑,用标记法高效统计‘安全区域’
  • 5分钟掌握Inter字体:现代网页排版的终极OpenType特性指南
  • 齿轮箱零部件及其装配质检中的TVA技术突破(9)
  • XXMI Launcher终极指南:一站式游戏模组管理器快速上手
  • 题解:AcWing 6 多重背包问题III
  • 突破Vitest浏览器测试并行执行瓶颈:从阻塞到飞一般的体验
  • ITK-SNAP医学图像分割:3步掌握专业级医学影像分析
  • 3大秘诀解锁Salt Player歌词黑科技:从零基础到车载高手全攻略
  • 终极指南:WarcraftHelper让魔兽争霸3在现代Windows系统焕发新生
  • 深度解析:Elasticsearch 的 REST API 有什么优点?
  • docker containerd 3 - 小镇
  • 题解:洛谷 AT_abc356_a [ABC356A] Subsegment Reverse
  • 别再傻傻分不清:5分钟搞懂通信里的误比特率、误码率、误帧率和误块率(BLER)