更新時(shí)間:2022年01月07日17時(shí)52分 來(lái)源:傳智教育 瀏覽次數(shù):
什么是聚合?聚合(aggregations)可以實(shí)現(xiàn)對(duì)文檔數(shù)據(jù)的統(tǒng)計(jì)、分析、運(yùn)算。聚合常見(jiàn)的有三類(lèi):
桶(Bucket)聚合:用來(lái)對(duì)文檔做分組,有TermAggregation和Date Histogram兩類(lèi)
TermAggregation:按照文檔字段值分組;
Date Histogram:按照日期階梯分組,例如一周為一組,或者一月為一組;
度量(Metric)聚合:用以計(jì)算一些值,比如:最大值、最小值、平均值等
Avg:求平均值;
Max:求最大值;
Min:求最小值;
Stats:同時(shí)求max、min、avg、sum等
管道(pipeline)聚合:其它聚合的結(jié)果為基礎(chǔ)做聚合。
DSL實(shí)現(xiàn)Bucket聚合
現(xiàn)在,我們要統(tǒng)計(jì)所有數(shù)據(jù)中的酒店品牌有幾種,此時(shí)可以根據(jù)酒店品牌的名稱(chēng)做聚合。類(lèi)型為term類(lèi)型,DSL示例:
GET /hotel/_search { "size": 0, // 設(shè)置size為0,結(jié)果中不包含文檔,只包含聚合結(jié)果 "aggs": { // 定義聚合 "brandAgg": { //給聚合起個(gè)名字 "terms": { // 聚合的類(lèi)型,按照品牌值聚合,所以選擇term "field": "brand", // 參與聚合的字段 "size": 20 // 希望獲取的聚合結(jié)果數(shù)量 } } } }
默認(rèn)情況下,Bucket聚合會(huì)統(tǒng)計(jì)Bucket內(nèi)的文檔數(shù)量,記為_(kāi)count,并且按照_count降序排序。我們可以修改結(jié)果排序方式:
GET /hotel/_search { "size": 0, "aggs": { "brandAgg": { "terms": { "field": "brand", "order": { "_count": "asc" // 按照_count升序排列 }, "size": 20 } } } }
默認(rèn)情況下,Bucket聚合是對(duì)索引庫(kù)的所有文檔做聚合,我們可以限定要聚合的文檔范圍,只要添加query條件即可:
GET /hotel/_search { "query": { "range": { "price": { "lte": 200 // 只對(duì)200元以下的文檔聚合 } } }, "size": 0, "aggs": { "brandAgg": { "terms": { "field": "brand", "size": 20 } } } }
總結(jié):
aggs代表聚合,與query同級(jí),此時(shí)query的作用是限定聚合的的文檔范圍。
聚合必須的三要素:聚合名稱(chēng)、聚合類(lèi)型、聚合字段。
聚合可配置屬性有size:指定聚合結(jié)果數(shù)量、order:指定聚合結(jié)果排序方式、field:指定聚合字段。
Log4j有什么作用?它主要由哪三部分組成?【Log4j面試問(wèn)題】
2021-12-16三目運(yùn)算符什么意思?三目運(yùn)算符怎么用?
2021-12-14Java構(gòu)造器(構(gòu)造函數(shù))使用注意問(wèn)題和實(shí)例教程【詳細(xì)介紹】
2021-12-14什么是Random類(lèi)?Random類(lèi)常用方法有哪些?
2021-12-14Java開(kāi)發(fā)案例----使用JDBC技術(shù)來(lái)實(shí)現(xiàn)QQ登錄
2021-12-14Git教程視頻:Git快速入門(mén)視頻教程
2021-12-10北京校區(qū)