這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何解析elasticsearch中的DSL查詢,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、大理州網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
ES提供了基于JSON的完整查詢DSL,它由兩種子句組成
##1.查詢分類 1>基本查詢
常用查詢命令:match、term、range。
2>復(fù)合查詢
復(fù)合查詢由一個基本查詢或者多個基本查詢組成,用邏輯方式組合(bool或者dis_max),或者更改查詢條件的行為(constant_score)。
3>ES還允許一種昂貴查詢,暫時用不到,就不在這里記錄,詳情查看官網(wǎng)。
##2.查詢與過濾上下文
我們使用_search API來檢索相關(guān)內(nèi)容
由圖可知:took表示本次查詢所花時間,time_out表示本次查詢是否超時,hits節(jié)點中是查詢到的內(nèi)容。
常用的查詢參數(shù)如下:
query,指定查詢條件
match,模糊查詢,eg:查詢"張",會將小張、張三等查詢出來
term,精確查找,eg: age=33
bool,多條件聯(lián)合查詢
must,用于bool條件下,eg: name="zhang san" and age="33"
should,用于bool條件下,eg:name="zhang san" or age="33"
filter,過濾檢索結(jié)果
range,區(qū)間查詢,eg:price > 8000
下面造數(shù)據(jù)舉例上面常用的查詢指令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表示完全匹配,也就是精確查詢,檢索前不會再對檢索詞進(jìn)行分詞拆解。如上的數(shù)據(jù)中,我們來檢索"張三"
發(fā)現(xiàn)沒有檢索到數(shù)據(jù),這是為什么呢?從es的官網(wǎng)得知,term屬于精確匹配,只能檢索單個詞,eg:我們檢索"三",
發(fā)現(xiàn)就被檢索出來了。那我們的希望是精確查找"張三",應(yīng)該怎么做呢?這時候我們就用到了復(fù)合查詢,如下
bool表示復(fù)合查詢標(biāo)志,must表示之內(nèi)的條件必須同時滿足。
這里為什么要采用復(fù)合查詢的方式才能檢索出數(shù)據(jù)呢?這是因為name這個詞在進(jìn)行存儲的時候,就做了分詞處理。我這里是采用默認(rèn)分詞器進(jìn)行分詞處理的,我們可以查看下默認(rèn)分詞器是如何處理的,
好了,term理解清楚了,再來看match
我們還是檢索"張三",得出的結(jié)果如下,
咦,"張七"咋個被檢索出來了?這是因為match進(jìn)行檢索的時候,會先進(jìn)行檢索詞拆分,拆完后,再根據(jù)單個詞去檢索,所以如上的檢索結(jié)果是:包含"張"與"三"的詞都會被檢索出來。
擴(kuò)展一下,如果想查詢包含"張三"的語句,即"張三"要緊鄰在一起出現(xiàn),采用match_phrase,
上述就是小編為大家分享的如何解析elasticsearch中的DSL查詢了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章名稱:如何解析elasticsearch中的DSL查詢
網(wǎng)站URL:http://jinyejixie.com/article42/gpggec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、用戶體驗、小程序開發(fā)、電子商務(wù)、營銷型網(wǎng)站建設(shè)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)