聚合分析(Aggregation)是搜索引擎中非常重要的一类功能,它用于对大量数据进行统计与分类计算,让数据分析变得更直观、更高效。在 Easysearch 中,聚合分析直接支持在搜索请求中对数据执行统计、分组、分桶等操作,是构建分析平台、报表系统以及仪表盘等产品的基础。
本文将围绕 Easysearch 中聚合分析的两个核心概念 —— 指标聚合(Metrics) 与 桶聚合(Buckets),讲清它们是什么、怎么用以及它们在数据分析中起到什么作用。内容适合掌握基础搜索概念的开发者、运维人员或分析师快速理解聚合的本质。
一、什么是 Easysearch? #
在进入聚合分析之前,我们先简单了解 Easysearch 是什么。
Easysearch 是一款分布式搜索型数据库,支持全文检索、结构化检索、多功能组合查询、向量检索、空间地理检索、语义分析以及聚合分析等功能。它诞生于对 Elasticsearch 进行深度优化和国产化改造的基础之上,保留了丰富的搜索能力,同时在易用性、轻量级、稳定性等方面做了优化,适合企业级数据检索与分析场景。
聚合分析是 Easysearch 的关键能力之一,它让你能够像写分析语句一样,通过搜索 API 得到诸如数据总量、平均值、最大/最小值以及分类统计等结果。
二、聚合分析的两个核心:指标聚合与桶聚合 #
在 Easysearch 中,聚合分析通常分成两个层面:
- 指标聚合(Metric Aggregations):对数值数据进行计算,如平均值、求和、最小/最大值等;
- 桶聚合(Bucket Aggregations):对数据进行“分组”,相当于是“把数据划分成多个区间或类别”。
理解这两个概念,就基本掌握了聚合分析的主体。
三、指标聚合:统计指标是什么? #
指标聚合 是一种对指定字段的数值做统计汇总的聚合方式,不会把数据分成多个分组,而是对整体数据或某个子集数据进行计算。
1. 常见的指标聚合类型 #
Easysearch 常用的指标聚合包括:
| 聚合类型 | 作用 |
|---|---|
avg | 求字段的平均值 |
sum | 求字段的总和 |
min | 求字段的最小值 |
max | 求字段的最大值 |
这些聚合可以直接告诉我们某个字段的统计特征,例如平均销售额、总订单数、最小回应时间等。
2. 通俗解释 #
- avg(平均值):把所有符合条件的数值相加后除以数量,给出一个平均参考;
- sum(总和):把所有数值加起来,用于求合计;
- min(最小值) & max(最大值):分别表示这一组数据中最小的值和最大的值。
比如统计某个字段 price 的平均值,就是告诉我们该字段的数据中心趋势,而不是具体某条记录的值。
四、桶聚合:如何分组和分类数据 #
桶聚合是聚合分析的“核心分类方式”,它把符合条件的数据划分成一个一个的桶(bucket),每个桶对应一类数据或一个值区间,然后我们可以对每个桶再做指标聚合。
1. 最简单的桶:Terms 聚合 #
Terms(术语)聚合是最常见的桶聚合。它根据某个字段的值进行分组,返回每种不同取值分别对应的桶。例如:
{
"aggs": {
"group_by_status": {
"terms": {
"field": "status.keyword"
}
}
}
}
这个聚合会根据 status 字段的不同值建立多个桶。例如值为 "200"、"404"、"500" 的请求分别形成不同的桶。每个桶都有自己的文档计数(doc_count),以及该值的聚合结果统计。
2. “桶”在数据分析中的意义 #
在分析场景中,桶聚合相当于 SQL 中 GROUP BY 的逻辑。每个桶相当于一个分组,它让我们可以:
- 统计不同类别的数据量
- 结合指标聚合在每个组内做统计
- 构建分类报表和可视化图表
例如统计不同城市的订单数量,或按状态码分类统计请求次数。
3. 聚合使用注意事项 #
- 聚合分析通常作用于数值型字段或不分词的 keyword 类型字段。
- 聚合分析是在内存中进行的,对于海量数据的聚合,合理的分片设计和查询优化非常重要
五、指标聚合与桶聚合如何联合使用 #
单独使用指标聚合只能得到对整个数据集的一个统计值,但在实际分析中,我们往往需要结合桶聚合来在每一个分组内做指标统计。
例如,我们希望统计每种 status 的平均响应时间:
{
"aggs": {
"by_status": {
"terms": {
"field": "status.keyword"
},
"aggs": {
"avg_resp_time": {
"avg": {
"field": "response_time"
}
}
}
}
}
}
这个查询的执行逻辑是:
- 用
terms聚合把文档按status分组; - 对每个组内的
response_time字段做平均值统计。
这种“分组 + 统计”的模式,是构建大多数分析报告的基础。
六、桶聚合的扩展与作用 #
除了最常见的 terms 桶聚合,Easysearch 还支持更多形式的桶聚合,例如:
- 范围桶(range、date_range):按数值或时间范围分组;
- 地理桶(geo_distance、geohash_grid):按地理位置分组;
- 嵌套桶(nested):对嵌套对象字段分组;
- 过滤桶(filter、filters):按过滤条件划分不同桶;
- 采样桶(sampler):抽样后再分桶,提升性能,主要用于在大数据量下通过样本估算分布;
- 显著性桶(significant_terms / significant_text):找出具有统计意义的词或文本,它不是简单的分组,而是找出某种“异常”或“特征”的频率,这在安全审计中很有用。
这些桶聚合提供了更加丰富的分组能力,让聚合分析不仅限于简单分组,还支持时间区间、空间范围等维度的分析。
七、聚合分析的实际意义 #
聚合分析在开发中到底有何价值?换句话说,它解决了什么问题:
1. 快速构建统计报表 #
你可以通过聚合分析获得诸如:
- 每个国家/城市的用户数量
- 各种状态码的请求次数
- 不同时间段内的平均响应时间
- 某个字段的总和或最值
这些是数据分析、业务监控、KPI 报表等常见需求。
八、总结 #
Easysearch 聚合分析的核心是 指标聚合 与 桶聚合:
- 指标聚合用于对数值字段做数学统计,如 avg、sum、min、max;
- 桶聚合用于把数据划分为多个分组,每个分组可以进一步执行其他聚合操作;
- 组合使用桶聚合与指标聚合,可以实现 分类统计分析。
- Easysearch 支持丰富的桶聚合类型,适应各种分析场景。
掌握以上概念后,你就能用 Easysearch 构建复杂的数据统计和分析查询,为数据驱动决策提供基础能力。





