BooleanQuery可以将多个查询语句组合在一起。下面是一个基础的模板:
{
"query": {
"bool" : {
"must" : {
"term" : { "user.id" : "kimchy" }
},
"filter": {
"term" : { "tags" : "production" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tags" : "env1" } },
{ "term" : { "tags" : "deployed" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
上面是从官网搬过来的官网地址
-
must
中的语句是必须满足的,会影响最终文档的得分 -
filter
中的语句是必须满足的,但是不会影响最终的得分 -
must_not
中的语句是必须不满足的, 不影响最终的得分 -
should
中的语句是可以满足的,影响得分,minimum_should_match
就是为这兄弟设置的
minimum_should_match
用于设置should中有多少个子句得被匹配,可以设置的值有很多种:
- 整数, 比如3,说明至少应该有3个子句被匹配
- 负数,比如-2,说明至少应该有(子句总数-2)个子句被匹配
- 百分数,比如75%,说明至少应该有(子句总数*0.75,向下取整)个子句被匹配
- 负百分数,比如-25%,说明至少应该有(子句总数*(1-0.25),向下取整)个子句被匹配
- 多个值组合,比如3<90%,说明当子句个数大于等于1小于等于3时,所有的子句都得满足;如果大于3那么就要满足(子句总数*0.9)
- 更牛x的多个值组合,比如 2<-25% 9<-3,说明当子句个数大于等于1小于等于2时,所有的子句都得满足;如果大于2小于等于9,那么满足(子句总数*(1-0.25))个子句被满足;如果子句总数大于9,那么就有(子句总数-3)个子句被满足。
一些补充:
- 当使用百分数时,遇到奇数的情况,比如总数是5,75%则得到的结果是3, -25%则得到的结果是1,也就意味着有4个子句要被满足
- 如果最终计算结果大于子句的总数,那么此时
minimum_should_match
是无效的
给查询起名字
模板文章来源:https://www.toymoban.com/news/detail-419325.html
{
"query": {
"bool": {
"should": [
{ "match": { "name.first": { "query": "shay", "_name": "first" } } },
{ "match": { "name.last": { "query": "banon", "_name": "last" } } }
],
"filter": {
"terms": {
"name.last": [ "banon", "kimchy" ],
"_name": "test"
}
}
}
}
}
查询结果中,会显示匹配的查询的名字
文章来源地址https://www.toymoban.com/news/detail-419325.html
到了这里,关于ES组合查询-Boolean Query的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!