Bool Query - 布尔组合查询
把其它查询布尔组合在一起。
使用 must、should、must_not、filter 选项表示其它查询之间的布尔关系。每个选项都可以出现任意次。
从结构上,布尔组合查询支持水平嵌套(各平级从句之间是and逻辑关系)、垂直嵌套。
-
must:查询从句必须用于匹配文档,相当于逻辑运算的 and。查询从句参与评分。must 从句的查询条件必须全部满足。
-
filter:查询从句必须用于匹配文档,相当于逻辑运算的 and。查询从句不参与评分。filter 从句的查询条件必须全部满足。
-
should:查询从句可以用于匹配文档,也可以不匹配,相当于逻辑运算的 or。查询从句参与评分。should 从句的查询条件满足的数量由 minimum_should_match 参数控制。
-
must_not:查询从句不能用来匹配文档。查询语句不参与评分。must_not 从句的查询条件必须全部不满足。
-
minimum_should_match:需要至少匹配指定数量个 should 从句。如果布尔组合查询只包含一个 should 从句,也就是说没有 must、filter、must_not 从句,那么该参数默认为 1。否则该参数默认为 0。
-
正整数值:比如 3。表示至少需要匹配 3 个 should 从句。
-
负整数值:比如 -2。表示至少需要匹配
should 从句的总数量 - 2
个 should 从句。 -
正比例值:比如 75%。表示至少需要匹配
(should 从句的总数量 * 75%,再向下取整)
个 should 从句。 -
负比例值:比如 -25%。表示至少需要匹配
should 从句的总数量 - (should 从句的总数量 * 25%,再向下取整)
个 should 从句。 -
组合值:比如 3<90%。表示如果 should 从句的数量为 1-3 之间,需要全部匹配;如果 should 从句的数量 > 3,需要匹配 90% 个 should 从句。
-
多个组合值:比如 2<-25% 9<-3。表示如果 should 从句的数量为 1-2 之间,需要完全匹配;如果 should 从句的数量为 3-9 之间,需要匹配 -25% 个 should 从句;如果 should 从句数量 > 9,需要匹配 -3 个 should 从句。
-
e.g. (must、filter 从句例子)查询"OriginWeather"是"Sunny"并且"DestWeather"是"Rain"的文档
GET kibana_sample_data_flights/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"match": {
"OriginWeather": "Sunny"
}
},
{
"match": {
"DestWeather": "Rain"
}
}
]
}
}
}
GET kibana_sample_data_flights/_search
{
"track_total_hits": true,
"query": {
"bool": {
"filter": [
{
"match": {
"OriginWeather": "Sunny"
}
},
{
"match": {
"DestWeather": "Rain"
}
}
]
}
}
}
filter从句查询得到的 max_score 以及每个匹配文档的 _score 都是0.0。
e.g. (<