如何在Elasticsearch中按ID条件统计指定日期范围内每月的数值总和?
解决方案
你需要在查询中新增query过滤节点限定generatorId的取值,同时调整聚合嵌套结构,即可获取特定ID对应文档的月度数值总和,修改后的查询如下:
query = { "size": 0, # 新增过滤条件块,限定generatorId取值 "query": { "bool": { "filter": [ { "term": { # 若generatorId为text类型,请替换为"generatorId.keyword" "generatorId": "150" } } ] } }, "aggs" : { "articles_over_time" : { "date_histogram" : { "field" : "timestamp", "interval" : "month", # Elasticsearch 7.x及以上版本推荐替换为下行配置 # "calendar_interval": "month" }, # sum聚合作为date_histogram的子聚合,返回每个月的统计值 "aggs": { "monthly_generated_total": { "sum": { "field": "generatedTotal" } } } } } }
注意事项
- 字段适配:如果你的
generatorId是text类型(ES动态映射字符串字段默认会同时生成text和keyword两个子类型),请将term查询的字段名修改为generatorId.keyword,避免分词导致匹配错误。 - 返回结果说明:查询返回结果的
articles_over_time数组中,每个时间桶的monthly_generated_total字段就是对应月份符合条件的generatedTotal总和。
内容的提问来源于stack exchange,提问作者feners
相关产品推荐
相关产品推荐

