說完了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

 

更多的話見原網址!