Elasticsearch Open Distro中now-1h时间范围查询无结果求助
解决Elasticsearch Open Distro告警查询中
now-1h失效的问题 我一眼就发现了两个关键问题,这应该就是你的范围查询始终返回空结果的原因:
1. 字段名不匹配(核心原因)
你的索引映射中定义的时间字段是timestamp,但在查询语句里却使用了@timestamp——这两个是完全不同的字段!Elasticsearch找不到@timestamp字段的匹配数据,自然返回空结果。而你用原始时间戳查询时应该是正确指定了timestamp字段,所以能正常获取结果。
2. 查询DSL结构错误
你的查询语句存在嵌套错误:外层的query节点里又嵌套了一个query,这不符合Elasticsearch的DSL规范。正确的结构应该是把size、query、aggregations放在同一层级,而不是都包裹在query里面。
修正后的查询语句
"search": { "indices": ["test_alert"], "body": { "size": 3, "query": { "bool": { "filter": { "range": { "timestamp": { // 改为映射中定义的字段名 "gte": "now-1h", "lte": "now", "format": "epoch_second" } } } } }, "aggregations": {} } }
额外验证建议
如果还是有疑问,可以用Elasticsearch的_validate/query API来检查你的查询是否合法,比如:
POST test_alert/_validate/query?explain { "query": { "bool": { "filter": { "range": { "timestamp": { "gte": "now-1h", "lte": "now", "format": "epoch_second" } } } } } }
这个API会返回查询的解释信息,帮你确认时间范围是否正确转换为epoch_second格式的时间戳。
内容的提问来源于stack exchange,提问作者snaipeberry
相关产品推荐
相关产品推荐

