ElasticSearch:組合查詢或複合查詢

Bool查詢

容許在單獨的查詢中組合任意數量的查詢,指定的查詢語句表名哪些部分是必須匹配(must)、應該匹配(should)或不能匹配(must_not)segmentfault

Bool過濾器

和查詢功能一致,可是同等狀況下,推薦使用過濾器性能

Range查詢和過濾

用於查詢介於必定範圍以內的值,適用於數字,日期,字符串。spa

參數 含義
gt 搜索大於某值的字段,不包括該值自己
gte 搜索大於某值的字段,包括該值自己
lt 搜索小於某值的字段,不包括該值自己
lte 搜索小於某值的字段,包括該值自己
使用range查詢時,請仔細考慮一下過濾器是否爲更好的選擇。因爲在查詢範圍之中的文檔是二元的匹配(「是的,文檔在範圍之中」或者「不是,文檔不在範圍之中」),
range
查詢沒必要是查詢。爲了得到更好的性能,它應該是過濾器。若是不肯定使用查詢仍是過濾器,請使用過濾器。在99%的用例中,使用range過濾器是正確的選擇。

Prefix查詢與過濾

和term查詢相似,prefix 查詢和過濾器容許你根據給定的前綴來搜索詞條,這裏前綴在搜索以前是沒有通過分析的。例如,爲了在索引中搜索以「liber」 開頭的所有活動。blog

wildcard查詢

字面意思,通配符查詢,可以使用 *,?來匹配任意字符。索引

exists過濾器

正如其名,exists 過濾器容許你過濾文檔,只查找那些在特定字段有值的文檔,不管其值是多少。exists 過濾器看上去是這樣的
005OiRqWgy1g6gjsa23spj30u70c3n05ip

missing 過濾器

missing過濾器讓你能夠搜索字段裏沒有值,或者是映射時指定的默認值的文檔(也叫做null值,即映射裏的nul1_ _value)。 爲了搜索缺失reviews字段的文檔,可使用下面這樣的過濾器:
clipboard
clipboawwrd
經常使用案例中使用哪些類型的查詢rem

用例 使用的查詢類型
你想從相似Google的界面接受用戶的輸入,而後根據這些輸入搜索文檔 若是想支持+/-或者在特定字段中搜索,就使用match查詢simple_ query_ string查詢
你想將輸入做爲詞組並搜索包含這個詞組的文檔,詞組中的單詞間也許包含一些間隔(slop) 要查找和用戶搜索類似的詞組,使用match phrase查詢,並設置必定量的slop
你想在not_ analyzed字段中搜索單個的關鍵詞,並徹底清楚這個詞應該是如何出現的 使用term查詢,由於查詢的詞條不會被分析
你但願組合許多不一樣的搜索請求或者不一樣類型的搜索,建立一個單獨的搜索來處理它們 使用bool查詢,將任意數量的子查詢組合到一個單獨的查詢
你但願在某個文檔中的多個字段搜索特定的單詞 使用multi_ match查詢,它和match查詢的表現相似,不過是在多個字段上搜索
你但願經過一次搜索返回全部的文檔 使用match_all查詢,在---次搜索中返回所有文檔
你但願在字段中搜索必定取值範圍內的值 使用range查詢,搜索取值在必定範圍內的文檔
你但願在字段中搜索以特定字符串開頭的取值 使用prefix查詢,搜索以給定字符串開頭的詞條
你但願根據用戶已經輸入的內容,提供單個關鍵詞的自動完成功能 使用prefix查詢,發送用戶已經輸入的內容,而後獲取以此文本開頭的匹配項
你但願搜索特定字段沒有取值的全部文檔 使用missing過濾器過濾出缺失某些字段的文檔
相關文章
相關標籤/搜索