如何在Elasticsearch中使用OR与AND实现多条件组合查询
Elasticsearch 多条件组合查询实现
问题背景
现有数据结构示例:
[ { "example_1": false, "example_2": "example_string_1", "example_3": "example_string_2", "example_4": "example_string_3" } ]
需要筛选同时满足以下所有条件的文档:
- example_1 为 false
- example_2 属于两个特定字符串中的一个
- example_3 属于六个特定字符串中的一个
此前已验证简单查询可正常运行:
{ "default_field" : "example_1", "query": "example_string_1" }
现需用Query DSL实现多条件组合查询,逻辑等价于 example_1:false AND example_2:(val1 OR val2) AND example_3:(val1 OR ... OR val6)。
解决方案
使用Elasticsearch的bool查询结合term、terms子查询即可实现需求,具体Query DSL语句如下:
{ "query": { "bool": { "must": [ { "term": { "example_1": false } }, { "terms": { "example_2": ["字符串1", "字符串2"] } }, { "terms": { "example_3": ["字符串A", "字符串B", "字符串C", "字符串D", "字符串E", "字符串F"] } } ] } } }
关键说明:
bool.must:所有子条件必须同时满足,对应逻辑ANDterm:用于精确匹配字段的单一值(此处匹配布尔类型的false)terms:用于匹配字段值在指定列表中的任意一项,对应逻辑OR
将上述代码中的示例字符串替换为你的目标字符串后,即可直接在Postman中测试使用。
内容的提问来源于stack exchange,提问作者rav
相关产品推荐
相关产品推荐

