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


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

  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中所有的數據計算一個數量  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM