Skip to main content

布尔查询 bool

布尔组合查询

POST _search
{
"query": {
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
参数说明
must必须满足子句查询条件,子句参与算分并影响结果的排名。
filter必须满足子句查询条件。与 must 不同的是,查询子句不参与算分,且有几率在缓存中执行以获取更快的执行速度。
should应该满足的子句查询条件,仅用于影响算分。
must_not查询子句不得出现在匹配文档中。子句在过滤器上下文中执行,这意味着评分被忽略并且子句有几率在缓存中执行。因为评分被忽略,所有文档的分数都为 0。
tip
Bool query in filter context

如果查询在filter上下文中使用并且它具有 should 子句,则至少需要一个 should 子句才能匹配

bool 查询采用匹配越多越好的方法,因此每个匹配的 must 或 should 子句的分数将被加在一起以提供每个文档的最终 _score。

POST _search
{
"query": {
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}

使用 minimum_should_match

您可以使用 minimum_should_match 参数指定返回文档必须匹配的 should 子句的数量或百分比。

如果 bool 查询包含至少一个 should 子句并且没有 must 或 filter 子句,则默认值为 1。否则,默认值为 0。