說完了ES的索引與檢索,接着再介紹一個ES高級功能API – 聚合(Aggregations),聚合功能爲ES注入了統計分析的血統,使用戶在面對大數據提取統計指標時變得遊刃有餘。一樣的工做,你在hadoop中可能須要寫mapreduce或hive,在mongo中你必須得用大段的mapreduce腳本,而在ES中僅僅調用一個API就能實現了。api
開始以前,提醒老司機們注意,ES原有的聚合功能Facets在新版本中將被正式被移除,抓緊時間用Aggregations替換Facets吧。Facets真的很慢!函數
1 關於Aggregations
Aggregations的部分特性相似於SQL語言中的group by,avg,sum等函數。但Aggregations API還提供了更加複雜的統計分析接口。oop
掌握Aggregations須要理解兩個概念:post
- 桶(Buckets):符合條件的文檔的集合,至關於SQL中的group by。好比,在users表中,按「地區」聚合,一我的將被分到北京桶或上海桶或其餘桶裏;按「性別」聚合,一我的將被分到男桶或女桶
- 指標(Metrics):基於Buckets的基礎上進行統計分析,至關於SQL中的count,avg,sum等。好比,按「地區」聚合,計算每一個地區的人數,平均年齡等
對照一條SQL來加深咱們的理解:大數據
1
|
SELECT COUNT(color) FROM table GROUP BY color
|
GROUP BY至關於作分桶的工做,COUNT是統計指標。spa
下面介紹一些經常使用的Aggregations API。code
2 Metrics
2.1 AVG
求均值。索引
1
2
3
4
5
6
|
GET /company/employee/_search
{
"aggs" : {
"avg_grade" : { "avg" : { "field" : "grade" } }
}
}
|
執行結果接口
1
2
3
4
5
|
{
"aggregations": {
"avg_grade": {"value": 75}
}
}
|
其餘的簡單統計API,如valuecount, max,min,sum做用與SQL中相似,就不一一解釋了。hadoop
更多的話見原網址!