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 的聚合功能。

相关推荐
缘华工业智维4 小时前
工业设备预测性维护:能源成本降低的“隐藏钥匙”?
大数据·网络·人工智能
NewsMash4 小时前
马来西亚代表团到访愿景娱乐 共探TikTok直播电商增长新路径
大数据·娱乐
凯禾瑞华养老实训室6 小时前
聚焦生活照护能力培育:老年生活照护实训室建设清单的模块设计与资源整合
大数据·人工智能·科技·ar·vr·智慧养老·智慧健康养老服务与管理
Q26433650238 小时前
【有源码】基于Hadoop生态的大数据共享单车数据分析与可视化平台-基于Python与大数据的共享单车多维度数据分析可视化系统
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
计算机毕业设计木哥8 小时前
计算机毕设选题推荐:基于Hadoop和Python的游戏销售大数据可视化分析系统
大数据·开发语言·hadoop·python·信息可视化·spark·课程设计
Lansonli9 小时前
大数据Spark(六十八):Transformation转换算子所有Join操作和union
大数据·分布式·spark
NewsMash9 小时前
贺Filcion五周岁:Chain Shop 10月17号正式上线
大数据
B站_计算机毕业设计之家10 小时前
Python+Flask+Prophet 汽车之家二手车系统 逻辑回归 二手车推荐系统 机器学习(逻辑回归+Echarts 源码+文档)✅
大数据·人工智能·python·机器学习·数据分析·汽车·大屏端
EkihzniY11 小时前
医疗发票 OCR 识别:打通医疗费用处理 “堵点” 的技术助手
大数据·人工智能·ocr