一:bool查询通过must,must_not以及should参数来接受多个查询
参数1:must 必须匹配
参数2:must_not 必须不匹配
参数3:should 默认情况下,should语句一个都不要求匹配,只有一个特例:如果查询中没有must语句,那么至少要匹配一个should语句
例如:
GET / my_index / my_type / _search
{
"query": {
"bool": {
"must": {
"match": {
"title": "quick"
}
},
"must_not": {
"match": {
"title": "lazy"
}
},
"should": [
{
"match": {
"title": "brown"
}
},
{
"match": {
"title": "dog"
}
}
]
}
}
}
上面语句的意思是说 title必须有quick字符串但是是不能有lazy字符串,brown和dog可以有也可以没有,如果有那么相关的更高
正如我们可以控制match查询的精度,我们也能够通过minimum_should_match参数来控制should语句需要匹配的数量,该参数可以是一个绝对数值或者一个百分比
GET / my_index / my_type / _search {
"query": {
"bool": {
"should": [{
"match": {
"title": "brown"
}
}, {
"match": {
"title": "fox"
}
}, {
"match": {
"title": "dog"
}
}],
"minimum_should_match": 2
}
}
}
以上查询的而结果仅包含以下文档:
title字段包含: "brown" AND "fox" 或者 "brown" AND "dog" 或者 "fox" AND "dog"
如果一份文档含有所有三个词条,那么它会被认为更相关。