bool查詢現在包括四種子句,must,filter,should,must_not。
看上面的流程圖就能很明顯的看到,filter與query還是有很大的區別的。
比如,query的時候,會先比較查詢條件,然後計算分值,最後返回文件結果;
而filter則是先判斷是否滿足查詢條件,如果不滿足,會快取查詢過程(記錄該文件不滿足結果);滿足的話,就直接快取結果。
綜上所述,filter快在兩個方面:
bool查詢對應lucene中的booleanquery,它由乙個或者多個子句組成,每個子句都有特定的型別。
must
返回的文件必須滿足must子句的條件,並且參與計算分值
filter
返回的文件必須滿足filter子句的條件。但是不會像must一樣,參與計算分值
should
返回的文件可能滿足should子句的條件。在乙個bool查詢中,如果沒有must或者filter,有乙個或者多個should子句,那麼只要滿足乙個就可以返回。minimum_should_match
引數定義了至少滿足幾個子句。
must_nout
返回的文件必須不滿足must_not定義的條件。
如果乙個查詢既有filter又有should,那麼至少包含乙個should子句。bool查詢也支援禁用協同計分選項disable_coord。一般計算分值的因素取決於所有的查詢條件。
bool查詢也是採用more_matches_is_better的機制,因此滿足must和should子句的文件將會合併起來計算分值。
},
"filter":
},"must_not" : }},
"should" : [},}
],"minimum_should_match" : 1,
"boost" : 1.0}}
在filter子句查詢中,分值將會都返回0。分值會受特定的查詢影響。
比如,下面三個查詢中都是返回所有status欄位為active的文件
第乙個查詢,所有的文件都會返回0:
get _search}}
}}
下面的bool查詢中包含了乙個match_all,因此所有的文件都會返回1
get _search
},"filter": }}
}}
constant_score與上面的查詢結果相同,也會給每個文件返回1:
get _search}}
}}
如果想知道到底是bool裡面哪個條件匹配,可以使用named query查詢:
}},
}}],
"filter" : }}
}
elasticsearch bool組合查詢
bool組合查詢 filter 過濾,不參與打分 must 如果有多個條件,這些條件都必須滿足 and與 should 如果有多個條件,滿足乙個或多個即可 or或 must not 和must相反,必須都不滿足條件才可以匹配到 非 布林查詢 與匹配其他查詢的布林組合的文件相匹配的查詢。bool查詢對...
Elasticsearch bool查詢命令詳解
bool查詢介紹 如果我們需要針對多個字段進行多維度的查詢,那麼布林查詢是你的最佳選擇,它可以通過組合多個查詢語句得到最終得結果.bool查詢的使用 示例 下面的查詢用於查詢 title 字段匹配 測試標題 並且不被標識為 spam 的文件。那些被標識為 starred 或在2014之後的文件,將比...
angular貨幣過濾 angular過濾器的使用
angular中常見過濾器 我們從後台請求的資料 有時候不是我們想要的格式 比如貨幣數字從後台獲取過來就是一堆純數字 但是貨幣數字通常是 按照規則用逗號分開並且數字前面有標識當前是哪種貨幣 過濾器的概念 angularjs為我們提供的處理資料格式的方式 過濾器的作用 將資料格式化我們想要的格式 過濾...