如何结合指定时间戳与日期数学表达式编写Elasticsearch查询?
解决Elasticsearch中结合指定时间戳与日期数学表达式的问题
问题原因
直接在毫秒时间戳后拼接-1m的写法不符合Elasticsearch的日期解析规则,它会把1678320000000-1m整体当作待解析的日期字符串,而该字符串不匹配索引设置的strict_date_optional_time||epoch_millis格式,因此触发解析错误。
正确实现方式
要在指定时间戳上应用日期数学表达式,必须用方括号包裹时间戳,并明确标注格式为epoch_millis,语法结构为:[<毫秒时间戳>||epoch_millis]<日期运算>
正确查询示例
{ "range": { "@timestamp": { "gte": "[1678320000000||epoch_millis]-1m", "lt": "1678320000000" } } }
逻辑说明
- 方括号
[]用于界定基准时间点,||epoch_millis告知Elasticsearch括号内的数值是毫秒级时间戳 - 后续的
-1m会基于这个基准时间执行日期运算,得到基准时间前1分钟的时间值
如果使用格式化日期字符串(如2023-03-09),也可以用类似格式实现:
{ "range": { "@timestamp": { "gte": "[2023-03-09||yyyy-MM-dd]-1m", "lt": "2023-03-09" } } }
内容的提问来源于stack exchange,提问作者jjbskir
相关产品推荐
相关产品推荐

