ElasticSearch:組合查詢或復合查詢


Bool查詢

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

Bool過濾器

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

Range查詢和過濾

用於查詢介於一定范圍之內的值,適用於數字,日期,字符串。

參數 含義
gt 搜索大於某值的字段,不包括該值本身
gte 搜索大於某值的字段,包括該值本身
lt 搜索小於某值的字段,不包括該值本身
lte 搜索小於某值的字段,包括該值本身

使用range查詢時,請仔細考慮一下過濾器是否為更好的選擇。由於在查詢范圍之中的文檔是二元的匹配(“是的,文檔在范圍之中”或者“不是,文檔不在范圍之中”),
range
查詢不必是查詢。為了獲得更好的性能,它應該是過濾器。如果不確定使用查詢還是過濾器,請使用過濾器。在99%的用例中,使用range過濾器是正確的選擇。

Prefix查詢與過濾

和term查詢類似,prefix 查詢和過濾器允許你根據給定的前綴來搜索詞條,這里前綴在搜索之前是沒有經過分析的。例如,為了在索引中搜索以“liber” 開頭的全部活動。

wildcard查詢

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

exists過濾器

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM