Elasticsearch 桶(Bucket)聚合详解及示例

在 Elasticsearch 中,桶(Bucket)聚合是一种强大的工具,它允许我们对数据进行分组并统计每组的数量。这种聚合类型对于理解数据的分布和进行分组统计非常有用。本文将详细介绍 Elasticsearch 的桶聚合,并提供完整的示例和解释。

桶聚合基础

桶聚合通过将数据分入不同的桶中来工作。每个桶代表一个分组,分组的依据可以是字段值、日期范围或其他标准。Elasticsearch 中常见的桶聚合包括:

  • Terms Aggregation:基于字段的词条值进行分组。
  • Date Histogram Aggregation:基于日期的范围进行分组。

聚合的必要元素

  • 聚合名称:为聚合定义的名称,用于在结果中标识。
  • 聚合类型 :指定使用的聚合类型,如 terms
  • 聚合字段:指定聚合应用的字段。

聚合的可配置属性

  • size:指定返回的桶数量。
  • order :指定桶的排序方式,可以是基于 _count(每个桶中的文档数量)或其他度量聚合。
  • field:参与聚合的字段。

示例:Terms Aggregation

假设我们有一个酒店数据索引,我们想要统计不同酒店品牌的分布情况。

DSL 查询

json 复制代码
GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10
      }
    }
  }
}

解释

  • size: 0 表示我们不需要原始文档的列表,只关心聚合结果。
  • aggs:定义聚合的区域。
  • brandAgg:为聚合操作定义的名称。
  • terms:指定聚合类型为词条聚合。
  • field: "brand":指定聚合字段为 brand
  • size: 10:限制返回的桶数量,这里最多返回 10 个品牌。

桶聚合结果排序

默认情况下,桶聚合结果会根据 _count(桶内的文档数量)降序排序。我们可以修改排序方式:

DSL 查询

json 复制代码
GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "order": {
          "_count": "asc"
        },
        "size": 20
      }
    }
  }
}

解释

  • order:指定排序方式,这里设置为按照 _count 升序排列。

桶聚合限定范围

桶聚合可以结合查询条件 query 来限定聚合的文档范围:

DSL 查询

json 复制代码
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200
      }
    }
  },
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}

解释

  • query:定义查询条件,这里使用 range 查询来限定价格不超过 200 的文档。
  • 聚合将只针对这些文档进行。

结语

桶聚合是 Elasticsearch 中进行数据分组统计的重要工具。通过本篇文章的示例和解释,你应该对如何使用桶聚合有了更深入的理解。无论是统计不同品牌的数量,还是根据特定条件对数据进行分组,桶聚合都能提供灵活且强大的支持。掌握桶聚合的使用,将有助于你更有效地进行数据分析和探索。希望本文能够帮助你在实际项目中更好地利用 Elasticsearch 的聚合功能。

相关推荐
恼书:-(空寄6 小时前
ES性能调优实战指南
elasticsearch
折哥的程序人生 · 物流技术专研8 小时前
效率翻倍:出版社多库区复合型 ABC 仓储拣选体系全解(含直发/越库/箱式立库/托盘立库)
大数据
Elastic 中国社区官方博客8 小时前
Elasticsearch:智能搜索 - AI builder 及 skills
大数据·人工智能·elasticsearch·搜索引擎·ai·信息可视化·全文检索
跨境摸鱼8 小时前
低价模型承压阶段跨境品牌如何把重心转向复购与客单
大数据·人工智能·跨境电商·亚马逊·跨境
果汁华9 小时前
LangGraph:构建状态化 AI 代理的革命性编排框架
大数据·人工智能
面向Google编程9 小时前
从零学习Kafka:生产者分区机制
大数据·kafka
盘古信息IMS10 小时前
全域场景重构,激活智造新未来!盘古信息机加行业数智化解决方案深度解析
大数据·人工智能
跨境卫士-小汪10 小时前
多国站点利润分化加剧跨境卖家如何重新排优先级
大数据·人工智能·产品运营·跨境电商·跨境
精益数智工坊10 小时前
物料管理是什么?物料管理的具体工作有哪些?
大数据·前端·数据库·人工智能·精益工程
xixixi7777710 小时前
全模态原生大脑降临:GPT-5.5(Spud)发布,推理/编码提升30%,百万上下文+原生电脑控制,开启Agent新纪元
大数据·网络·人工智能·gpt·安全·电脑·量子计算