Elasticsearch 7.11.x如何为现有查询添加@timestamp日期范围过滤条件
你需要将原单条件match查询改为bool组合查询,同时在过滤规则中加入带时区配置的日期范围限制即可实现需求,修改后的完整查询如下:
POST metrics-general-dev-000049/_search { "query": { "bool": { "filter": [ { "match": { "source": "investigation-data-depot" } }, { "range": { "@timestamp": { "gte": "2021-08-20", "lt": "2021-08-22", "time_zone": "MST" } } } ] } }, "aggs": { "time_buckets": { "date_histogram": { "field": "@timestamp", "fixed_interval": "1d", "extended_bounds": { "min": "2021-08-20", "max": "2021-08-21" }, "min_doc_count": 0, "time_zone": "MST" } } }, "size": 0 }
关键修改说明
- 用
bool.filter组合两个过滤条件:两个规则会同时生效,且filter上下文不需要计算相关性评分,查询性能优于must子句 - 日期范围查询显式指定
time_zone: "MST":Elasticsearch默认使用UTC时区处理日期,旧示例大多未指定时区导致范围偏移,这是之前规则不生效的核心原因 - 日期上限使用
lt: "2021-08-22":可以完整覆盖MST时区8月20日、8月21日两天的所有数据,避免因时间精度问题漏掉8月21日23:59:59之后的毫秒级记录 - 聚合配置同步调整:将date_histogram的
extended_bounds改为目标日期范围,同时同步添加时区配置,保证聚合返回的时间桶和你指定的时区范围一致
内容的提问来源于stack exchange,提问作者James DePaul
相关产品推荐
相关产品推荐

