布尔查询是最常用的组合查询,根据子查询的规则,只有文档满足所有子查询条件时,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