ES布尔过滤器 组合查询示例 系统管理员 2022-12-19 13:25 91阅读 0赞 ### 文章目录 ### * * * * 布尔过滤器 * 示例 * 嵌套布尔过滤器 #### 布尔过滤器 #### 实际工作中,我们需要ES帮助我们完成组合查询,类似于下面的SQL语句 SELECT product FROM products WHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3") AND (price != 30) 这些情况下,你需要 bool 过滤器。这是以其他过滤器作为参数的组合过滤器,将它们结合成多种布尔组合。 【布尔过滤器】 bool 过滤器由三部分组成: { "bool" : { "must" : [], "should" : [], "must_not" : [], } } must:所有分句都必须匹配,与 AND 相同 must\_not:所有分句都必须不匹配,与 NOT 相同 should:至少有一个分句匹配,与 OR 相同 bool 过滤器的每个部分都是可选的(例如,你可以只保留一个 must 分句),而且每个部分可以包含一到多个过滤器 #### 示例 #### 查询数据库中价格为20或者ID为XXX的数据,并且价格不等于30 SELECT product FROM products WHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3") AND (price != 30) GET /my_store/products/_search { "query": { "bool": { "should": [ { "term": { "price": 20 } }, { "term": { "productID": "XHDK-A-1293-#fJ3" } } ], "must_not": [ { "term": { "'price": 30 } } ] } } } #### 嵌套布尔过滤器 #### 虽然 bool 是一个组合过滤器而且接受子过滤器,需明白它自己仍然只是一个过滤器。这意味着你可以在 bool 过滤器中嵌套 bool 过滤器,让你实现更复杂的布尔逻辑。 SELECT document FROM products WHERE productID = "KDKE-B-9947-#kL5" OR ( productID = "JODL-X-1937-#pV7" AND price = 30 ) GET /my_store/products/_search { "query": { "bool": { "should": [ { "term":{ "productID": "KDKE-B-9947-#kL5"}}, { "bool": { "must": [ { "term": { "productID": "JODL-X-1937-#pV7" }}, { "term": { "price": 30 }} ] } } ] } } } 1、 productID 匹配第一个 bool 中的 term 过滤器。 2、 这两个字段匹配嵌套的 bool 中的 term 过滤器。
还没有评论,来说两句吧...