您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何解析elasticsearch中的DSL查詢,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
ES提供了基于JSON的完整查詢DSL,它由兩種子句組成
##1.查詢分類 1>基本查詢
常用查詢命令:match、term、range。
2>復合查詢
復合查詢由一個基本查詢或者多個基本查詢組成,用邏輯方式組合(bool或者dis_max),或者更改查詢條件的行為(constant_score)。
3>ES還允許一種昂貴查詢,暫時用不到,就不在這里記錄,詳情查看官網。
##2.查詢與過濾上下文
我們使用_search API來檢索相關內容
由圖可知:took表示本次查詢所花時間,time_out表示本次查詢是否超時,hits節點中是查詢到的內容。
常用的查詢參數如下:
query,指定查詢條件
match,模糊查詢,eg:查詢"張",會將小張、張三等查詢出來
term,精確查找,eg: age=33
bool,多條件聯合查詢
must,用于bool條件下,eg: name="zhang san" and age="33"
should,用于bool條件下,eg:name="zhang san" or age="33"
filter,過濾檢索結果
range,區間查詢,eg:price > 8000
下面造數據舉例上面常用的查詢指令
PUT /user/_doc/1 { "id":1001, "name":"張三", "age":30, "sex":"0", "add_time":"2020-09-22" }
PUT /user/_doc/2 { "id":1002, "name":"張七", "age":35, "sex":"0", "add_time":"2020-09-24" }
term表示完全匹配,也就是精確查詢,檢索前不會再對檢索詞進行分詞拆解。如上的數據中,我們來檢索"張三"
發現沒有檢索到數據,這是為什么呢?從es的官網得知,term屬于精確匹配,只能檢索單個詞,eg:我們檢索"三",
發現就被檢索出來了。那我們的希望是精確查找"張三",應該怎么做呢?這時候我們就用到了復合查詢,如下
bool表示復合查詢標志,must表示之內的條件必須同時滿足。
這里為什么要采用復合查詢的方式才能檢索出數據呢?這是因為name這個詞在進行存儲的時候,就做了分詞處理。我這里是采用默認分詞器進行分詞處理的,我們可以查看下默認分詞器是如何處理的,
好了,term理解清楚了,再來看match
我們還是檢索"張三",得出的結果如下,
咦,"張七"咋個被檢索出來了?這是因為match進行檢索的時候,會先進行檢索詞拆分,拆完后,再根據單個詞去檢索,所以如上的檢索結果是:包含"張"與"三"的詞都會被檢索出來。
擴展一下,如果想查詢包含"張三"的語句,即"張三"要緊鄰在一起出現,采用match_phrase,
上述就是小編為大家分享的如何解析elasticsearch中的DSL查詢了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。