ElasticSearch:使用dsl语句同时查询出最近2小时、最近1天、最近7天、最近30天的数量
场景
需要使用dsl语句同时查询出最近2小时、最近1天、最近7天、最近30天的数量,如果按照常规逻辑,需要写四个dsl语句,才能查询出来,那么能不能使用一句dsl就可以查询出结果呢?
show time
GET alarm_forward_history_*/_search
{"size": 0,"query": {"bool": {"must": [{"term": {"sourceName": {"value": "运维123"}}},{"term": {"sourceAlertKey": {"value": "生产问题描述223"}}},{"term": {"cmdb.app_name": {"value": "dba数据库"}}}]}},"aggs": {"date": {"date_range": {"field": "@timestamp","ranges": [{"from": "now-2h","to": "now","key": "lastTwoHour"},{"from": "now-1d","to": "now","key": "lastDay"},{"from": "now-7d","to": "now","key": "lastSevenDay"},{"from": "now-30d","to": "now","key": "lastMonth"}]}}}
}
输出结果大致如下:
"aggregations" : {"date" : {"buckets" : [{"key" : "lastMonth","from" : 1.728359639296E12,"from_as_string" : "2024-10-08T03:53:59.296Z","to" : 1.730951639296E12,"to_as_string" : "2024-11-07T03:53:59.296Z","doc_count" : 7},{"key" : "lastSevenDay","from" : 1.730346839296E12,"from_as_string" : "2024-10-31T03:53:59.296Z","to" : 1.730951639296E12,"to_as_string" : "2024-11-07T03:53:59.296Z","doc_count" : 0},{"key" : "lastDay","from" : 1.730865239296E12,"from_as_string" : "2024-11-06T03:53:59.296Z","to" : 1.730951639296E12,"to_as_string" : "2024-11-07T03:53:59.296Z","doc_count" : 0},{"key" : "lastTwoHour","from" : 1.730944439296E12,"from_as_string" : "2024-11-07T01:53:59.296Z","to" : 1.730951639296E12,"to_as_string" : "2024-11-07T03:53:59.296Z","doc_count" : 0}]}}
}
总结
- 直接采用date_range函数,即可解决