1、bool查询
bool查询是组合叶子查询或复合查询子句的默认查询方式,如must,should,must_not或者filter子句;must与should子句查询最终分数由两个子句各自匹配分数相加得到,而must_not与filter子句需要在过滤查询中执行;
bool查询底层由Lucene中的BooleanQuery类实现,该查询由一个或多个布尔子句组成,每个子句由特定类型声明;
1.1、bool查询子句中的类型
序号 | 类型 | 描述 |
---|---|---|
1 | must | 该查询子句必须出现在匹配的文档中且与相似度分数计算相关 |
2 | filter | 该查询子句必须出现在匹配的文档中且是在过滤上下文中执行,与must查询不同的是该查询会忽略相似度分数计算且会对结果缓存 |
3 | should | 该查询子句应该出现在匹配的文档中 |
4 | must_not | 该查询子句必须不能出现在匹配的文档中,该查询在过滤上下文中执行,这也意味着不会计算相似度分数(分数为0)且对结果会缓存 |
文档同时匹配查询子句must或should可获得更高的分数,而最后相似度分_score
就是通过匹配must或should计算出的分数相加得到
//请求参数
POST bank/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"gender.keyword": "M"
}
}
],
"filter": {
"term": {
"state.keyword": "MO"
}
},
"must_not": [
{
"range": {
"age": {
"gte": 20,
"lte": 30
}
}
}
],
"should": [
{
"match": {
"email": "comcubine.com"
}
},
{
"match": {
"address": "Avenue"
}
}
],
"minimum_should_match": 1,
"boost": 1
}
}
}
//返回结果
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 7.1838775,
"hits" : [
{
"_index" : "bank",
"_type" : "_doc",
"_id" : "58",
"_score" : 7.1838775,
"_source" : {
"account_number" : 58,
"balance" : 31697,
"firstname" : "Marva",
"lastname" : "Cannon",
"age" : 40,
"gender" : "M",
"address" : "993 Highland Place",
"employer" : "Comcubine",
"email" : "marvacannon@comcubine.com",
"city" : "Orviston",
"state" : "MO"
}
},
{
"_index" : "bank",
"_type" : "_doc",
"_id" : "286",
"_score" : 2.2192826,
"_source" : {
"account_number" : 286,
"balance" : 39063,
"firstname" : "Rosetta",
"lastname" : "Turner",
"age" : 35,
"gender" : "M",
"address" :