Elasticsearch bool query 布爾複合查詢
簡介
它是使用一個或多個布爾子句構建的,每個子句都具有類型的出現。
bool query
使用最好查詢方法,每個匹配項must
和should
子句的得分將加到一起,_score
以爲每個文檔提供最終結果。
支持參數
must
子句(查詢)必須出現在匹配的文檔中,並將有助於得分。filter
,子句(查詢)必須出現在匹配的文檔中。但是不像 must查詢的分數將被忽略。Filter子句在filter上下文中執行,這意味着計分被忽略,並且子句被考慮用於緩存。should
,子句(查詢)應出現在匹配的文檔中。must_not
,子句(查詢)不得出現在匹配的文檔中。子句在過濾器上下文中執行,這意味着計分被忽略,並且子句被視爲用於緩存。由於忽略計分,0因此將返回所有文檔的分數。
minimum_should_match參數
您可以使用minimum_should_match
參數指定返回的文檔,必須滿足should
子句的數量或百分比。
如果bool
查詢包含至少一個should
子句,而沒有must
或 filter
子句,則默認值爲1。否則,默認值爲0。
簡單來說,只有滿足指定minimum_should_match
數量的should
子句的文檔,才符合要求。
請求示例
POST bank_new/_search
{
"query": {
"bool" : {
"must" : {
"term" : { "state" : "VA" }
},
"filter": {
"range" : {
"balance": { "gte" : 1000, "lte" : 100000 }
}
},
"must_not" : {
"range" : {
"age" : { "gte" : 50, "lte" : 150 }
}
},
"should" : [
{ "term" : { "city" : "Salix" } },
{ "term" : { "city" : "Dante" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
minimum_should_match 詳解
類型 | 示例 | 描述 |
---|---|---|
整數 | 1 | 子句的數量,固定值 |
負整數 | -1 | 表示可選子句的數量,應該減去這個值 |
百分比 | 75% | 表示必需的可選子句總數的此百分比。根據百分比計算得出的數字將四捨五入並用作最小值。 |
父百分比 | -25% | 表示可能缺少可選子句總數的這一百分比。從百分比中計算出的數字會四捨五入,然後從總數中減去以確定最小值。 |
注意
當處理百分比時,負值可用於在極端情況下獲得不同的行爲。在處理4個子句時,75%和-25%表示相同的內容,但是在處理5個子句時,75%表示需要3,而-25%表示需要4。
如果基於規範的計算確定不需要任何可選子句,則有關BooleanQueries的常規規則仍將在搜索時適用(不包含必需子句的BooleanQuery必須仍與至少一個可選子句匹配)。
無論計算達到多少,都將永遠不會使用大於可選子句數量的值或小於1的值。(即:無論計算結果的結果有多低或多高,所需匹配項的最小數量都不會低於1或大於子句的數量。