布尔查询是最常用的组合查询,根据子查询的规则,只有文档满足所有子查询条件时,elasticsearch 引擎才将结果返回。布尔查询支持的子查询条件共4种
must (and)
should (or)
must_not (not)
filter
需求: 查询 from 为 gu 并且 age 为 30 的数据
GET zhifou/doc/_search { "query": { "bool": { "must": [ { "match": { "from": "gu" } }, { "match": { "age": 30 } } ] } } }
需求: 查询只要时 from 为 gu 或者 tags 为 闭月的数据
GET zhifou/doc/_search { "query": { "bool": { "should": [ { "match": { "from": "gu" } }, { "match": { "tags": "闭月" } } ] } } }
需求:查询 from 既不是 gu 并且 tags 也不是 可爱 还有 age不是18的数据
GET zhifou/doc/_search { "query": { "bool": { "must_not": [ { "match": { "from": "gu" } }, { "match": { "tags": "可爱" } }, { "match": { "age": 18 } } ] } } }
需求: 查询 from 为 gu, age 大于 25 的数据
GET zhifou/doc/_search { "query": { "bool": { "must": [ { "match": { "from": "gu" } } ], "filter": { #此时的 filter 不在 must 列表中 "range": { "age": { "gt": 25 } } } } } }
注意: 这里 bool 下面为什么不用 should 而用 must
首先 在查询过程中 优先经过 filter 过滤,
然后 过滤出来的结果 再去匹配 must 或 should 中的 此时 should 是或 因此 会放行所有的结果
must
:与关系,相当于关系型数据库中的and
。should
:或关系,相当于关系型数据库中的or
。must_not
:非关系,相当于关系型数据库中的not
。filter
:过滤条件。range
:条件筛选范围。gt
:大于,相当于关系型数据库中的>
。gte
:大于等于,相当于关系型数据库中的>=
。lt
:小于,相当于关系型数据库中的<
。lte
:小于等于,相当于关系型数据库中的<=
。原文:https://www.cnblogs.com/zhukaijian/p/12879678.html