Elastic查询如何实现时间范围AND多exists字段OR的匹配逻辑
你的现有查询将所有exists子句放在must数组中,must下的所有条件是AND逻辑,要求四个字段同时存在,和你需要的「四个字段任意一个存在」的OR逻辑不符。
正确查询写法
GET /get_test/_count { "query": { "bool": { "must": [ { "range": { "ts": { "gte": "2021-05-01T04:00:00Z", "lt": "2021-10-01T04:00:00Z" } } } ], "should": [ {"exists": {"field": "data.data1"}}, {"exists": {"field": "data.data2"}}, {"exists": {"field": "data.data3"}}, {"exists": {"field": "data.data4"}} ], "minimum_should_match": 1 } } }
逻辑说明
- 时间范围条件放在
must中,要求必须满足 - 四个
exists条件放在should中,默认是OR逻辑 minimum_should_match: 1强制要求should下的条件至少满足1个,避免出现仅符合时间条件但四个字段都不存在的记录被统计。
内容的提问来源于stack exchange,提问作者blue-sky
相关产品推荐
相关产品推荐

