布尔查询 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 子句才能匹配
如果查询在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。