Python查询ELK多条件语法错误及指定时间戳查询方法
错误原因
你当前的查询语法不符合Elasticsearch Query DSL规范:query字段下不能直接并列match、range多个查询子句,多个需要同时满足的条件必须通过bool复合查询包裹。
正确查询格式
这里推荐使用bool.filter存放条件,不需要计算相关性评分,查询性能更高:
query = { "query": { "bool": { "filter": [ {"match": {"event.action": "ssh_login"}}, {"range": { "timestamp": { "gte": "now-2d/d", "lt": "now/d" } }} ] } } }
具体时间戳查询方法
你的timestamp字段是标准ISO 8601格式,Elasticsearch原生支持直接传入该格式的时间字符串做范围匹配,只需替换range中的gte、lt值为具体时间即可,示例如下:
query = { "query": { "bool": { "filter": [ {"match": {"event.action": "ssh_login"}}, {"range": { "timestamp": { "gte": "2021-07-12T00:00:00.000Z", "lt": "2021-07-14T00:00:00.000Z" } }} ] } } }
如果你的索引mapping中已经指定了timestamp为date类型,无需额外加格式参数,ES会自动适配格式。
内容的提问来源于stack exchange,提问作者Andrew Zacharakis
相关产品推荐
相关产品推荐

