ES中對應的DSL如下:
在ES5.x及以上版本中,字符串類型應該設置為關鍵字或文本類型,根據類型進行精確的值匹配。
進行精確值查詢時,可以使用過濾器,因為過濾器執行速度非常快,不會計算相關性(ES會計算查詢得分),過濾器查詢結果容易緩存。
布爾濾波器組件:
當我們需要多個過濾器時,我們只需要將它們放在bool過濾器的不同部分。
術語是指包括,如下:
姓名包含[“奧尼爾”、“麥迪”]。
返回結果:
範圍查詢可以提供包含和排除兩種範圍表達式,可供組合的選項如下:
類似於sql中的範圍查詢:
ES中對應的DSL如下:
以下sql,age不為空:
ES中對應的DSL如下:
以下sql,age為空:
ES中對應的DSL如下:
註意:缺少的查詢在5.x版中不再存在。
匹配包含未分析的前綴字符:
匹配具有與通配符表達式匹配的字段的文檔((未分析))。支持的通配符:
1) *匹配任意字符序列(包括空字符序列);
2) ?它匹配任何單個字符。
註意,這個查詢可能很慢,因為它需要遍歷多個術語。
為了防止非常慢的通配符查詢,通配符不能是* * * *或?開始
正則表達式查詢允許您使用正則表達式術語進行查詢。
例子如下:
註意:匹配*會很慢,需要使用長前綴。
通常都差不多。*?+通配符查詢的常規檢索性能會很低。
模糊查詢在模糊性中指定的最大編輯距離內找到所有可能的匹配,然後檢查術語詞典,找出要在索引中檢索的關鍵字。
例如:
檢索類型為user的索引test_index中的所有信息。但是在es6.x版本中,壹個索引只有壹種類型,而在未來的es7.x版本中,該類型將被取消,所以這個查詢沒有意義。
返回指定id的所有信息。
全文檢索查詢是通過分析器對查詢條件進行分析,然後在全文域進行全文查詢。
全文搜索取決於在映射中設置的分析器,在映射中使用ik斷字符。
所以在查詢開發的過程中,我們需要先了解索引的映射,以便選擇查詢方式。
匹配查詢接受的文本/數字/日期類型,分析它們並構造查詢。
查詢傳入參數的分段,搜索具有相同單詞的文檔。
Match_phrase查詢分析文本,並從分析文本創建壹個短語查詢。
用戶已經逐漸習慣於在他們完成輸入查詢內容之前為他們顯示搜索結果,這被稱為即時搜索或隨鍵入搜索。
不僅可以讓用戶在更短的時間內得到搜索結果,我們還可以引導用戶在索引中搜索真實的結果。
例如,如果用戶輸入尊尼獲加bl,我們希望在他們完成輸入搜索條件之前得到它:尊尼獲加黑標和尊尼獲加藍標。
Match_phrase_prefix與Match_phrase相同,只是它允許對文本中的最後壹個詞進行前綴匹配。