如何构建Elasticsearch查询实现risk_accepted的三条件OR逻辑?
Elasticsearch 实现多条件OR查询需求
你需要查询满足以下任一条件的文档:
risk_accepted字段值为falserisk_accepted字段不存在risk_accepted字段值为null
原查询的问题在于:exists 是匹配字段存在的文档,和你要的“字段不存在”逻辑相反,同时未覆盖字段值为null的场景。
以下是实现三个条件OR逻辑的正确查询:
GET cd.io.schema.securityissueinstance/_count { "query": { "bool": { "should": [ {"term": {"risk_accepted": false}}, {"bool": {"must_not": [{"exists": {"field": "risk_accepted"}}]}}, {"term": {"risk_accepted": null}} ], "minimum_should_match": 1 } } }
逻辑说明:
{"term": {"risk_accepted": false}}:精准匹配字段值为false的文档{"bool": {"must_not": [{"exists": {"field": "risk_accepted"}}]}}:匹配risk_accepted字段完全不存在的文档{"term": {"risk_accepted": null}}:匹配字段存在但值为null的文档minimum_should_match: 1:确保至少满足上述三个条件中的一个(当bool查询只有should时,默认值就是1,显式声明更清晰)
内容的提问来源于stack exchange,提问作者soubhagya
相关产品推荐
相关产品推荐

