实战精讲如何在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大类所有复杂聚合都由它们组合而成Bucket桶聚合分组聚合按照条件将数据分到不同“桶”中等价于GROUP BY例按城市分组、按年龄分组、按日期分组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 常用语法value_count统计数量sum求和avg平均值max最大值min最小值实战统计员工薪资相关指标GET/employee/_search{size:0,// 不返回原始数据只看聚合结果aggs:{// 聚合固定关键字salary_stats:{// 自定义聚合名称stats:{// 多值统计包含sum/avg/max/min/countfield:salary}}}}五、桶聚合Bucket分组统计最常用5.1 定义桶聚合按照字段值、范围、日期、关键词对数据分组。5.2 常用分组方式terms按字段精确值分组最常用range按数值范围分组date_range按日期范围分组histogram直方图分组实战1按城市分组termsGET/employee/_search{size:0,aggs:{group_by_city:{// 自定义分组名terms:{// 按值分组field:city,// 分组字段size:10// 显示前10组}}}}实战2按年龄范围分组rangeGET/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嵌套先分组后计算企业级报表十一、聚合分析最佳实践关闭原始数据返回必须加size: 0大幅提升性能字段类型要求分组字段必须是keyword不能是text先过滤后聚合用query缩小数据范围聚合更快避免深度分页聚合结果默认返回10条可通过size调整性能优先能用filter不用query能term不用match十二、总结两大核心Bucket分组 Metric计算基础用法单分组、单计算高级用法多层嵌套聚合、带条件聚合、时间聚合核心价值秒级实现海量数据统计分析支撑数据大屏、运营报表、可视化平台ES聚合分析是大数据统计、企业运营分析、日志监控的核心技术掌握本文内容可直接应对企业级聚合开发需求。The End点点关注收藏不迷路