袁庭新老師ES系列13節(jié)|Elasticsearch聚合aggregations
前言
上一章節(jié)我們帶領(lǐng)大家學(xué)習(xí)了Elasticsearch中的高級查詢,這一章節(jié)袁老師再帶領(lǐng)大家學(xué)習(xí)一種高級查詢:聚合。聚合可以用來干什么呢?聚合可以讓我們極其方便的實(shí)現(xiàn)對數(shù)據(jù)的統(tǒng)計和分析。例如:
什么品牌的手機(jī)最受歡迎?
這些手機(jī)的平均價格、最高價格、最低價格?
這些手機(jī)每月的銷售情況如何?
實(shí)現(xiàn)這些統(tǒng)計功能的比數(shù)據(jù)庫的SQL要方便的多,而且查詢速度非常快,可以實(shí)現(xiàn)近實(shí)時搜索效果。
一. 基本概念
1.聚合基本概念介紹
Elasticsearch中的聚合,包含多種類型,最常用的兩種:一個叫桶,一個叫度量。
桶(bucket)類似于(group by)。桶的作用是,按照某種方式對數(shù)據(jù)進(jìn)行分組,每一組數(shù)據(jù)在Elasticsearch中稱為一個桶 ,例如我們根據(jù)國籍對人劃分,可以得到中國桶、英國桶、日本桶等;或者我們按照年齡段對人進(jìn)行劃分,0~10歲、10~20歲、20~30歲和30~40歲等。
Elasticsearch中提供的劃分桶的方式有很多:

度量(metrics)相當(dāng)于聚合的結(jié)果。分組完成以后,我們一般會對組中的數(shù)據(jù)進(jìn)行聚合運(yùn)算,例如求平均值、最大、最小、求和等,這些在Elasticsearch中稱為度量。
比較常用的一些度量聚合方式:

2.聚合操作數(shù)據(jù)準(zhǔn)備
為了測試聚合,我們先批量導(dǎo)入一些數(shù)據(jù)。
創(chuàng)建索引:
響應(yīng)結(jié)果:

注意:在Elasticsearch中,需要進(jìn)行聚合、排序、過濾的字段其處理方式比較特殊,因此不能被分詞,必須使用keyword或數(shù)值類型 。這里我們將color和make這兩個文字類型的字段設(shè)置為keyword類型,這個類型不會被分詞,將來就可以參與聚合。
導(dǎo)入數(shù)據(jù),這里是采用批處理的API,大家直接復(fù)制到Kibana運(yùn)行即可:
響應(yīng)結(jié)果:

二. 聚合為桶
1.聚合為桶語法介紹
首先,我們按照汽車的顏色color來劃分桶,按照顏色分桶最好是使用Term Aggregation類型,按照顏色的名稱來分桶。語法格式見下:
桶查詢的相關(guān)屬性介紹:

2.聚合為桶案例演示
根據(jù)汽車的顏色聚合為桶:
響應(yīng)結(jié)果:
演示過程見下:

桶查詢響應(yīng)結(jié)果的相關(guān)屬性介紹:

通過聚合的結(jié)果我們發(fā)現(xiàn),目前紅色的小車比較暢銷。
三. 桶內(nèi)度量
1.桶內(nèi)度量介紹
前面的例子告訴我們每個桶里面的文檔數(shù)量,這很有用。但通常,我們的應(yīng)用需要提供更復(fù)雜的文檔度量。例如,每種顏色汽車的平均價格是多少?
因此,我們需要告訴Elasticsearch使用哪個字段,使用何種度量方式進(jìn)行運(yùn)算,這些信息要嵌套在桶內(nèi),度量的運(yùn)算會基于桶內(nèi)的文檔進(jìn)行。
桶內(nèi)度量語法介紹:
2.桶內(nèi)度量案例
現(xiàn)在,我們?yōu)閯倓偟木酆辖Y(jié)果添加求價格平均值的度量。
桶內(nèi)度量相關(guān)屬性介紹:

響應(yīng)結(jié)果:
可以看到每個桶中都有自己的avg_price字段,這是度量聚合的結(jié)果。

四. 結(jié)語
好了關(guān)于Elasticsearch中的聚合aggregations查詢相關(guān)的內(nèi)容袁老師就給大家介紹到這里,這一章節(jié)我們主要學(xué)習(xí)了聚合的基本概念,例如桶和度量。然后,帶領(lǐng)大家通過綜合案例的形式學(xué)習(xí)了如何聚合為桶,以及如何在桶內(nèi)進(jìn)行度量操作。關(guān)于Elasticsearch的聚合相關(guān)內(nèi)容我們就給大家介紹到這里。下一小節(jié)我們帶領(lǐng)同學(xué)們學(xué)習(xí)如何使用Elasticsearch進(jìn)行集群相關(guān)的知識。