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"
}
}
}
}
}
}
朔风