1. 程式人生 > >elasticsearch--聚合中桶(Buckets)和指標(Metrics)的概念

elasticsearch--聚合中桶(Buckets)和指標(Metrics)的概念

就會 只有一個 img max() earch 執行 都是 access buck

寫在前面的話:讀書破萬卷,編碼如有神
--------------------------------------------------------------------
主要內容包括:

  1. 聚合的兩個核心概念:桶(bucket)和指標(metric)
  2. 桶和指標的深入理解
  3. 示例說明

技術分享

---------------------------------------------------------------------

1、聚合的兩個核心概念

  在Elasticsearch的聚合中需要掌握兩個核心的概念:桶(bucket)、

指標(metric)

    桶(bucket): 滿足特定條件的文檔的集合

    指標(metric): 對桶內的文檔進行聚合分析的操作

  (ps:每個聚合都是一個或者多個桶和零個或者多個指標的組合。)

翻譯成粗略的SQL語句來解釋的話:

SELECT COUNT(color)  ---> 相當於指標

FROM table

GROUP BY color  --->2  相當於桶

桶在概念上類似於SQL的分組(GROUP BY),而指標則類似於COUNT()、SUM()、MAX()等統計方法。

---------------------------------------------------------------------

2、桶和指標的深入理解

(1)桶  

  a、簡單來說桶就是滿足特定條件的文檔的集合。

  b、當聚合開始被執行,每個文檔裏面的值通過計算來決定符合哪個桶的條件,如果匹配到,文檔將放入相應的桶並接著開始聚合操作。

  c、桶也可以被嵌套在其他桶裏面。

(2)指標

  a、桶能讓我們劃分文檔到有意義的集合,但是最終我們需要的是對這些桶內的文檔進行一些指標的計算。分桶是一種達到目的地的手段:它提供了一種給文檔分組的方法來讓我們可以計算感興趣的指標。

  b、大多數指標是簡單的數學運算(如:最小值、平均值、最大值、匯總),這些是通過文檔的值來計算的。

(3)桶和指標的組合

  聚合是由桶和指標組成的。聚合可能只有一個桶,可能只有一個指標,或者可能兩個都有。也有可能一些桶嵌套在其他桶裏面。

---------------------------------------------------------------------

3、舉例說明

比如有如下的數據:

  city  name

  北京  小李

  北京  小王

  上海  小張

  上海   小麗

  上海  小陳

基於city來劃分buckets的話,可以劃分出兩個bucket:一個是北京bucket、一個是上海bucket

  北京bucket:包含了2個人,小李、小王

  上海bucket:包含了3個人,小張、小麗、小陳

按照某個字段進行bucket劃分,那個字段的值相同的那些數據,就會被劃分到一個bucket中。當我們有了一堆bucket之後,就可以對每個bucket中的數據聚合分析了,比如說計算一個bucket內所有數據的數量 ,或者計算一個bucket內所有數據的平均值、最大值、最小值。

metric : 就是對一個bucket執行的某種聚合分析的操作,比如說求平均值、最大值、最小值 。

上面利用elasticsearch的分組,可以轉化成對應的sql語句如下:

  select count(*) from access_log group by user_id

其中:bucket 相當於 group by user_id -->那些user_id相同的數據,就會被劃分到一個bucket中

   metric 相當於 count(*) -->對每個user_id bucket中所有的數據計算一個數量  

elasticsearch--聚合中桶(Buckets)和指標(Metrics)的概念