袁庭新老師ES系列12節(jié)|Elasticsearch高級查詢
前言
上篇文章講了關(guān)于Elasticsearch的基本查詢操作。接下來袁老師為大家?guī)鞥lasticsearch高級查詢部分相關(guān)的內(nèi)容。Elasticsearch是基于JSON提供完整的查詢DSL(Domain Specific Language:領(lǐng)域特定語言)來定義查詢。因此,我們有必要在專題模塊來詳細(xì)探討Elasticsearch高級查詢部分內(nèi)容。
我們先來做個熱身,了解下這一小節(jié)學(xué)習(xí)的目標(biāo),我將帶領(lǐng)大家從以下五個模塊來學(xué)習(xí)Elasticsearch的高級查詢相關(guān)技術(shù)。
結(jié)果過濾查詢
條件過濾查詢
結(jié)果排序
分頁查詢
高亮顯示
一.?結(jié)果過濾查詢
默認(rèn)情況下,Elasticsearch在搜索的結(jié)果中,會把文檔中保存在_source的所有字段都返回。
如果我們只想獲取其中的部分字段,我們可以添加_source屬性來進(jìn)行過濾。
1.直接指定字段
演示示例:
語法說明:在查詢結(jié)構(gòu)中,通過_source屬性來指定查詢結(jié)果集中需要保留哪些字段信息。
響應(yīng)結(jié)果:
演示過程見下:

2.指定includes和excludes
我們也可以通過:

注意:二者都是可選的。
演示示例:
響應(yīng)結(jié)果:
演示效果見下:

下面的示例與上面的結(jié)果將是一樣的:
響應(yīng)結(jié)果:
演示效果見下:

二. filter過濾
Elasticsearch使用的查詢語言(DSL)擁有一套查詢組件,這些組件可以以無限組合的方式進(jìn)行搭配。這套組件可以在以下兩種情況下使用:過濾情況(?ltering context)和查詢情況(query context)。
如何選擇查詢與過濾?通常的規(guī)則是,使用查詢(query)語句來進(jìn)行全文搜索或者其它任何需要影響相關(guān)性得分的搜索。除此以外的情況都使用過濾(?lters)。
1.條件查詢中進(jìn)行過濾
所有的查詢都會影響到文檔的評分及排名。如果我們需要在查詢結(jié)果中進(jìn)行過濾,并且不希望過濾條件影響評分,那么就不要把過濾條件作為查詢條件來用。而是使用filter方式:
響應(yīng)結(jié)果:
演示效果見下:

2.無查詢條件直接過濾
如果一次查詢只有過濾,沒有查詢條件,不希望進(jìn)行評分,我們可以使用constant_score取代只有?lter語句的bool查詢。在性能上是完全相同的,但對于提高查詢簡潔性和清晰度有很大幫助。
響應(yīng)結(jié)果:
演示效果見下:

三. 結(jié)果排序
1.單字段排序
sort可以讓我們按照不同的字段進(jìn)行排序,并且通過order屬性指定排序的方式。

演示案例:
響應(yīng)結(jié)果:
2.多字段排序
假定我們想要結(jié)合使用price和_score(得分)進(jìn)行查詢,并且匹配的結(jié)果首先按照價格排序,然后再按照相關(guān)性得分降序排序:
響應(yīng)結(jié)果:
四. 分頁查詢
Elasticsearch中數(shù)據(jù)都存儲在分片中,當(dāng)執(zhí)行搜索時每個分片獨立搜索后,數(shù)據(jù)再經(jīng)過整合返回。那么,如果要實現(xiàn)分頁查詢該怎么辦呢?
Elasticsearch的分頁與MySQL數(shù)據(jù)庫非常相似,都是指定兩個值:

演示案例:
響應(yīng)結(jié)果:
五. 高亮顯示
1.高亮顯示原理
高亮顯示的原理介紹見下:
服務(wù)端搜索數(shù)據(jù),得到搜索結(jié)果。
把搜索結(jié)果中,搜索關(guān)鍵字都加上約定好的標(biāo)簽。
前端頁面提前寫好標(biāo)簽的CSS樣式,即可高亮顯示。
Elasticsearch中實現(xiàn)高亮的語法比較簡單,高亮顯示語法格式見下:
在使用match查詢的同時,加上一個highlight屬性。highlight屬性提供以下屬性:

演示案例:
響應(yīng)結(jié)果:
?演示過程見下:

六. 結(jié)語
關(guān)于Elasticsearch高級查詢篇相關(guān)的內(nèi)容我們就給大家介紹完了,來復(fù)習(xí)回顧下這一章節(jié)的主要內(nèi)容。本文從結(jié)果過濾查詢、結(jié)果排序、分頁查詢、檢索查詢、關(guān)鍵字查詢、高亮顯示、過濾查詢等幾個方面通過實例講解了Elasticsearch的高級查詢。如果還沒有掌握的小伙伴,一定要通過文章中大量的案例來進(jìn)行實操演練從而鞏固這一部分知識。下一小節(jié)我們將為大家?guī)鞥lasticsearch中聚合操作相關(guān)的內(nèi)容。