BooleanQuery可以將多個查詢語句組合在一起。下面是一個基礎(chǔ)的模板:
{
"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
}
}
}
上面是從官網(wǎng)搬過來的官網(wǎng)地址
-
must
中的語句是必須滿足的,會影響最終文檔的得分 -
filter
中的語句是必須滿足的,但是不會影響最終的得分 -
must_not
中的語句是必須不滿足的, 不影響最終的得分 -
should
中的語句是可以滿足的,影響得分,minimum_should_match
就是為這兄弟設(shè)置的
minimum_should_match
用于設(shè)置should中有多少個子句得被匹配,可以設(shè)置的值有很多種:
- 整數(shù), 比如3,說明至少應(yīng)該有3個子句被匹配
- 負(fù)數(shù),比如-2,說明至少應(yīng)該有(子句總數(shù)-2)個子句被匹配
- 百分?jǐn)?shù),比如75%,說明至少應(yīng)該有(子句總數(shù)*0.75,向下取整)個子句被匹配
- 負(fù)百分?jǐn)?shù),比如-25%,說明至少應(yīng)該有(子句總數(shù)*(1-0.25),向下取整)個子句被匹配
- 多個值組合,比如3<90%,說明當(dāng)子句個數(shù)大于等于1小于等于3時,所有的子句都得滿足;如果大于3那么就要滿足(子句總數(shù)*0.9)
- 更牛x的多個值組合,比如 2<-25% 9<-3,說明當(dāng)子句個數(shù)大于等于1小于等于2時,所有的子句都得滿足;如果大于2小于等于9,那么滿足(子句總數(shù)*(1-0.25))個子句被滿足;如果子句總數(shù)大于9,那么就有(子句總數(shù)-3)個子句被滿足。
一些補(bǔ)充:
- 當(dāng)使用百分?jǐn)?shù)時,遇到奇數(shù)的情況,比如總數(shù)是5,75%則得到的結(jié)果是3, -25%則得到的結(jié)果是1,也就意味著有4個子句要被滿足
- 如果最終計算結(jié)果大于子句的總數(shù),那么此時
minimum_should_match
是無效的
給查詢起名字
模板文章來源:http://www.zghlxwxcb.cn/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"
}
}
}
}
}
查詢結(jié)果中,會顯示匹配的查詢的名字文章來源地址http://www.zghlxwxcb.cn/news/detail-419325.html
到了這里,關(guān)于ES組合查詢-Boolean Query的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!