ElasticSearch 聚合统计

聚合统计

度量聚合:求字段的平均值,最小值,最大值,总和等

桶聚合:将文档分成不同的桶,桶的划分可以根据字段的值,范围,日期间隔

管道聚合:在桶聚合的结果上执行进一步计算

进行聚合的语法如下

json 复制代码
{
  "aggs": {
    "<agg_name>": {
      "<agg_type>": {
        "field": "<field_name>"
      }
    }
  }
}

聚合也可以进行嵌套

json 复制代码
{
  "aggs": {
    "<agg_name>": {
      "<agg_type>": {
        "field": "<field_name>"
      },
      "aggs": {
        "<agg_child_name>": {
          "<agg_type>": {
            "field": "<field_name>"
          }
        }
      }
    }
  }
}

度量聚合(Metrics aggregations)

平均值聚合

聚集被命名为 avg_age

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {"avg_age": {"avg": {"field": "age"}}}
}

最小值 / 最大值 聚合

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {"max_age": {"max": {"field": "age"}}}
}
json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {"min_age": {"min": {"field": "age"}}}
}

求和聚合

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {"sum_age": {"sum": {"field": "age"}}}
}

桶聚合(Bucket aggregations)

词条聚合(Terms aggregation)

按照某个字段的值进行聚合

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {"group_by_age": {"terms": {"field": "age"}}}
}

范围聚合(Range aggregation)

按照某个字段的范围进行聚合,from提供区间下界(包括),to提供区间上界(不包括)

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_ranges":{
      "range": {
        "field": "age",
        "ranges": [
          { "to": 10 },
          { "from": 10, "to": 20 },
          { "from": 20 }
        ]
      }
    }
  }
}

管道聚合(Pipeline aggregations)

平均桶聚合(Average bucket aggregation)

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_ranges": {
      "range": {
        "field": "age",
        "ranges": [
          { "to": 10 }, { "from": 10, "to": 20 }, { "from": 20 }
        ]
      },
      "aggs": {
        "age_avg": {"avg": {"field": "age"}}
      }
    },
    "range_avg": {
      "avg_bucket": {"buckets_path": "age_ranges>age_avg"}
    }
  }
}

对年龄分组,并求分组后的平均值,然后对分组的平均值再求平均值

求和桶聚集(Sum bucket aggregation)

json 复制代码
POST user/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_ranges": {
      "range": {
        "field": "age",
        "ranges": [
          { "to": 10 }, { "from": 10, "to": 20 }, { "from": 20 }
        ]
      },
      "aggs": {
        "age_sum": { "sum": {"field": "age"} }
      }
    },
    "range_sum": {
      "sum_bucket": { "buckets_path": "age_ranges>age_sum" }
    }
  }
}

对年龄分组,并求分组后的和,然后对分组的和再求和

参考博客

1\]https://www.elastic.co/guide/en/elasticsearch/reference/8.11/search-aggregations.html \[2\]https://juejin.cn/post/7103514121642983455

相关推荐
子榆.40 分钟前
CANN 性能分析与调优实战:使用 msprof 定位瓶颈,榨干硬件每一分算力
大数据·网络·人工智能
新芒1 小时前
暖通行业两位数下滑,未来靠什么赢?
大数据·人工智能
忆~遂愿1 小时前
CANN ATVOSS 算子库深度解析:基于 Ascend C 模板的 Vector 算子子程序化建模与融合优化机制
大数据·人工智能
chian-ocean1 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
艾莉丝努力练剑2 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
倒流时光三十年3 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
lili-felicity3 小时前
CANN异步推理实战:从Stream管理到流水线优化
大数据·人工智能
2501_933670794 小时前
2026 高职大数据专业考什么证书对就业有帮助?
大数据
xiaobaibai1534 小时前
营销自动化终极形态:AdAgent 自主闭环工作流全解析
大数据·人工智能·自动化
星辰_mya4 小时前
Elasticsearch更新了分词器之后
大数据·elasticsearch·搜索引擎