Skip to content
章节导航

Query DSL 桶聚合 Date Histogram 介绍和案例

分桶聚合查询 - Date Histogram

将日期类型的字段按照固定的时间间隔进行分桶,并对每个时间间隔内的文档进行进一步的操作和计算

基本语法

shell
GET /index/_search
{
  "size": 0,
  "aggs": {
    "date_histogram_name": {
      "date_histogram": {
        "field": "date_field_name",
        "interval": "interval_expression"
      },
      "aggs": {
        "sub_aggregation": {
          "sub_aggregation_type": {}
        }
      }
    }
  }
}

# 解析
# index:替换为要执行聚合查询的索引名称。
# date_histogram_name:替换为自定义的 date_histogram 聚合名称。
# date_field_name:替换为要聚合的日期类型字段名。
# interval_expression:指定用于分桶的时间间隔。时间间隔可以是一个有效的日期格式(如 1d、1w、1M),也可以是一个数字加上一个时间单位的组合(如 7d 表示 7 天,1h 表示 1 小时)。
# sub_aggregation:指定在每个日期桶内进行的子聚合操作。
# sub_aggregation_type:替换单独子聚合操作的类型,可以是任何有效的子聚合类型。

数据准备

一个电商网站的订单索引,包含订单日期和订单金额字段。

shell
POST /order_history/_bulk
{ "index": {} }
{ "order_date": "2025-01-01", "amount" : 100 ,"book_title": "飞驰人生3"}
{ "index": {} }
{ "order_date": "2025-02-05", "amount" : 150, "book_title": "惊蛰无声" }
{ "index": {} }
{ "order_date": "2025-03-02", "amount" : 500 ,"book_title": "镖人:风起大漠"}
{ "index": {} }
{ "order_date": "2025-05-02", "amount" : 250 , "book_title": "熊出没·年年有熊"}
{ "index": {} }
{ "order_date": "2025-05-05", "amount" : 10 ,"book_title": "熊猫计划之部落奇遇记"}
{ "index": {} }
{ "order_date": "2025-02-18", "amount" : 290 , "book_title": "星河入梦"}

案例说明

使用 date_histogram 聚合查询将订单按日期进行分桶,并计算每个分桶内的订单金额总和。

shell
GET /order_history/_search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "month",
        "format": "yyyy-MM"
      },
      "aggs": {
        "total_sales": {
          "sum": {
            "field": "amount"
          }
        }
      }
    }
  }
}