Elastic Search日期直方图聚合:如何限制返回10个桶并排序
Elasticsearch 聚合桶数量限制问题解决
问题背景
样例文档
{ "totalPrice": 122.24173769217346, "createdAt": "2023-07-24T06:25:44.961", "domain": "mystore.wix.com" }
需求
- 检索
domain匹配mystore.wix.com的记录 - 按
createdAt日期(按天)分组 - 聚合每组的
totalPrice总和(保留三位小数) - 按
createdAt降序排序聚合结果 - 仅返回前10个聚合桶
当前尝试的查询语句
{ "size": 0, "query": { "bool": { "must": [ { "match_phrase": { "domain": "mystore.wix.com" } } ] } }, "aggs": { "groupByDate": { "date_histogram": { "field": "createdAt", "calendar_interval": "1d", "min_doc_count": 1, "order": { "_key": "desc" } }, "aggs": { "totalPrice": { "sum": { "field": "totalPrice", "script": {"source": "Math.round(doc['totalPrice'].value * 1000.0)/1000.0"} } } } } } }
问题:无法限制聚合桶数量为10,返回结果过大。
解决方法
只需在date_histogram的配置中添加size参数并设置为10即可。由于你已经配置了按_key(日期)降序排序,添加该参数后会直接返回最新的10个有数据的日期桶。
修改后的完整查询:
{ "size": 0, "query": { "bool": { "must": [ { "match_phrase": { "domain": "mystore.wix.com" } } ] } }, "aggs": { "groupByDate": { "date_histogram": { "field": "createdAt", "calendar_interval": "1d", "min_doc_count": 1, "order": { "_key": "desc" }, "size": 10 // 新增参数限制返回的桶数量 }, "aggs": { "totalPrice": { "sum": { "field": "totalPrice", "script": {"source": "Math.round(doc['totalPrice'].value * 1000.0)/1000.0"} } } } } } }
关键说明
size参数指定了date_histogram返回的最大桶数,配合降序排序逻辑,精准获取最新10天的聚合结果- 原有
min_doc_count:1的配置确保只返回包含数据的日期桶,避免空桶占用配额
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

