一、关于
- 1、说明
在 ElasticSearch 中,基于索引和检索的基础上,提供了聚合(Aggregations)的功能,对存储的数据进行统计和分析
在 ElasticSearch 中,将聚合分为 指标聚合(Metric)、存储桶聚合(Bucket)、管道聚合(Pipeline)三类
参考:Aggregations | Elasticsearch Guide [8.0] | Elastic
- 2、语法
在查询(_search)的请求体中,以 aggregations 为节点,并按如下的语法来定义
{
"aggregations" : { <!-- 聚合节点,固定的格式,使用 aggregations 或 aggs 命名 -->
"<aggregation_name>" : { <!-- 聚合的名字,自定义,比如 aggs-max 等 -->
"<aggregation_type>" : { <!-- 聚合的类型,例如 avg、range 等 -->
<aggregation_body> <!-- 聚合体:对哪些字段进行聚合 -->
}
[,"meta" : { [<meta_data_body>] } ]? <!-- 元数据,在结果里原样返回 -->
[,"aggregations" : { [<sub_aggregation>]+ } ]? <!-- 在聚合里面再定义的子聚合 -->
}
[,"<aggregation_name_2>" : { ... } ]* <!-- 其他聚合的名字 -->
}
}
- 3、补充
默认情况下,包含聚合的搜索会同时返回搜索结果和聚合结果。若仅要返回聚合结果,请设置 size 为 0
默认情况下,操作字段没有值的文档将被忽略,但是也可以为它们定义具体值,通过 missing 参数指定
二、示例
- 1、指标聚合
对一个数据集执行类似SQL中的最大(max)、最小(min)、求和(sum)、求平均(avg)等操作的聚合
基础聚合
{
"aggs": {
// 求所有文档的指定字段的平均值
"aggs_price_avg": {
"avg": {
"field": "price"
}
}
}
}
优化返回
GET /goods/_search
{
"aggs": {
"aggs-avg": {
"avg": {
"field": "price",
// 为没有该值的文档指定默认值
"missing": 0
}
}
},
// 不返回搜索结果
"size": 0
}
搜索聚合
GET /goods/_search
{
"aggs": {
// 根据指定字段分桶