Elasticsearch6中如何在must内嵌套should实现多邮编OR匹配?
解决Elasticsearch中添加邮编OR匹配的问题
嘿,刚上手Elasticsearch的时候搞懂布尔查询的逻辑确实容易懵,我来帮你调整这个查询!
你原来的查询里,邮编是作为must(AND)条件的一部分,要实现两个邮编的OR匹配,只需要把原来单独的match邮编条件,换成一个嵌套的bool查询,用should来实现OR逻辑就可以了。
修改后的完整查询
{ "_source": { "includes": [ "Name", "Address", "Contact" ] }, "query": { "bool": { "must": [ { "query_string": { "fields": [ "firstName", "lastName", "middleName" ], "query": "*andy*" } }, { "bool": { "should": [ { "match": { "zipcode": "55555" } }, { "match": { "zipcode": "66666" } } ], "minimum_should_match": 1 // 明确要求至少匹配一个should条件,默认就是1,写出来更清晰 } } ] } } }
关键说明
- 嵌套的
bool查询放在must数组里,意味着它和前面的名字查询是AND关系:名字包含andy 并且 邮编是55555或者66666 should数组里的两个match就是你要的OR逻辑,只要满足其中一个邮编即可- 如果以后需要匹配更多邮编,直接在
should数组里添加更多match项就行;或者用terms查询更简洁(适合精确匹配多个值):
{ "terms": { "zipcode": ["55555", "66666", "77777"] } }
把这个替换掉嵌套的bool查询就可以,效果是一样的,而且写法更简洁。
内容的提问来源于stack exchange,提问作者Ranyu87
相关产品推荐
相关产品推荐

