一個匹配文件的查詢,該文件與其他查詢的布林組合相匹配。bool查詢對映到Lucene BooleanQuery。它是用一個或多個布林子句構建的,每個子句都有一個型別出現。出現型別有:
Occur | Description |
---|---|
must | 該子句(查詢)必須出現在匹配的檔案中,並將影響評分。 |
filter | 該子句(查詢)必須出現在匹配的文件中。然而,與must不同的是,查詢的分數將被忽略。過濾器子句在過濾器上下文中執行,這意味著評分將被忽略,子句將被考慮用於快取。 |
should | 該子句(查詢)應該出現在匹配的文件中。 |
must_not | 子句(查詢)不能出現在匹配的文件中。子句在過濾器上下文中執行,這意味著忽略評分,子句被考慮用於快取。因為忽略評分,所以返回所有文件的評分為0。 |
bool查詢採用“匹配越多越好”的方法,因此每個匹配must或should子句的分數將被加在一起,為每個文件提供最終的_score。
POST _search
{
"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
}
}
}
使用 minimum_should_match
可以使用minimum_should_match
引數指定返回的文件必須匹配的should子句的數量或百分比。
如果bool查詢至少包含一個should子句,而沒有must或filter子句,則預設值為1。否則,預設值為0。
For other valid values, see the minimum_should_match
parameter.
Scoring with bool.filter
在篩選器元素下指定的查詢對評分沒有影響——得分返回為0。分數只受指定的查詢的影響。例如,以下三個查詢都返回status
欄位包含術語 active
的所有文件。
第一個查詢為所有文件分配0分,因為沒有指定評分查詢:
GET _search
{
"query": {
"bool": {
"filter": {
"term": {
"status": "active"
}
}
}
}
}
這個bool查詢有一個match_all查詢,它為所有文件賦值1.0
GET _search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"term": {
"status": "active"
}
}
}
}
}
constant_score查詢的行為與上面的第二個示例完全相同。constant_score查詢為篩選器匹配的所有文件賦值1.0。
GET _search
{
"query": {
"constant_score": {
"filter": {
"term": {
"status": "active"
}
}
}
}
}
Name queries
每個查詢在其頂級定義中接受一個_name
。您可以使用命名查詢來跟蹤哪些查詢與返回的文件匹配。如果使用命名查詢,則響應為每次命中都包含一個matched_queries
屬性。
本作品採用《CC 協議》,轉載必須註明作者和本文連結