1. 程式人生 > >ElasticSearch學習筆記之二十二 指標聚合續

ElasticSearch學習筆記之二十二 指標聚合續

ElasticSearch學習筆記之二十二 指標聚合續

Max Aggregation

Max Aggregation是一個從需要聚合的文件中提取欄位最大值的單值數字型聚合. 這些值既可以從文件中提取也可以從script獲取。

注意:
max aggregation 和 min aggregationoperate操作雙精度的資料, 所以當資料的大小超過 253

的時候,取得是近似值.

計算所有文件的最大值:

POST /sales/_search?size=0
{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }
    }
}

返回結果如下:

{
    ...
    "aggregations": {
        "max_price": {
            "value": 200.0
        }
    }
}

Min Aggregation

Min Aggregation是一個從需要聚合的文件中提取欄位最小值的單值數字型聚合. 這些值既可以從文件中提取也可以從script獲取。

計算所有文件的最大值:

POST /sales/_search?size=0
{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

返回:

{
    ...

    "aggregations": {
        "min_price": {
            "value": 10.0
        }
    }
}

Percentiles Aggregation

Percentiles Aggregation是一個從需要聚合的文件中提取的數字型值計算一個或者多個百分比多值數字型聚合

. 這些值既可以從文件中提取也可以從script獲取。

Percentiles 展示了觀測值的百分比.例如,95th percentile 是大於所觀察值的95%的值。

Percentiles經常被用來尋找極端值。在正態分佈中,0.13%和97.47%代表三個標準偏差的平均值。任何超出三標準差的資料通常被認為是一種異常資料。

我們可以利用percentiles 聚合的結果評估資料分佈,判斷資料是否異常,分析資料是否符合雙峰分佈。

假設你的資料是由網站載入時間組成的。平均和中間負載時間對管理員來說不是非常有用。MAX 可能是有趣的,但它可以很容易地被一個單一的慢響應歪曲。

我們可以看一下代表載入時間範圍的 percentiles 聚合:

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time" 
            }
        }
    }
}

load_time欄位必須是一個欄位型的

哦人情況下, percentile聚合指標會計算一系列百分比: [ 1, 5, 25, 50, 75, 95, 99 ]. 返回如下:

{
    ...

   "aggregations": {
      "load_time_outlier": {
         "values" : {
            "1.0": 5.0,
            "5.0": 25.0,
            "25.0": 165.0,
            "50.0": 445.0,
            "75.0": 725.0,
            "95.0": 945.0,
            "99.0": 985.0
         }
      }
   }
}

正如我們所看到的, 聚合會為每一個百分比返回一個計算過的值, 如果我們假設相應時間是毫秒級別的, 很明顯網站的響應時間一般在10-725ms, 偶爾的尖峰到 945-985ms.

通常情況下,管理員支隊極端值感興趣-極端的百分比。我們可以僅僅指出我們感興趣的百分比(請求的百分比必須要0~100之間)

GET latency/_search
{
    "size": 0,
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time",
                "percents" : [95, 99, 99.9] 
            }
        }
    }
}

使用percents引數指定的百分比計算。

Stats Aggregation

Stats Aggregation是一個從需要聚合的文件中提取的數字型值欄位進行統計計算的多值數字型聚合. 這些值既可以從文件中提取也可以從script獲取。

返回的統計資訊包括:min、max、sum, count 和avg。

假設我們由一系列代表學生成績(0至100)的文件:

POST /exams/_search?size=0
{
    "aggs" : {
        "grades_stats" : { "stats" : { "field" : "grade" } }
    }
}

上面的聚合將會對文件的grade欄位進行統計. 聚合的型別是stats field 定義了文件聚合計算的欄位.
返回結果如下:

{
    ...

    "aggregations": {
        "grades_stats": {
            "count": 2,
            "min": 50.0,
            "max": 100.0,
            "avg": 75.0,
            "sum": 150.0
        }
    }
}

Sum Aggregation

Sum Aggregation是一個從需要聚合的文件中對欄位求和的單值數字型聚合. 這些值既可以從文件中提取也可以從script獲取。

假設我們由一系列代表銷售紀錄的文件,我們可以將所有帽子的銷售價格相加

POST /sales/_search?size=0
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "match" : { "type" : "hat" }
            }
        }
    },
    "aggs" : {
        "hat_prices" : { "sum" : { "field" : "price" } }
    }
}

返回結果如下:

{
    ...
    "aggregations": {
        "hat_prices": {
           "value": 450.0
        }
    }
}

Value Count Aggregation

Value Count Aggregation是一個從需要聚合的文件中對欄位計數的單值數字型聚合. 這些值既可以從文件中提取也可以從script獲取。

通常,該聚合將與其他單值數字型聚合一起使用。例如,當計算AVG時,可能對平均值的計算值感興趣。

POST /sales/_search?size=0
{
    "aggs" : {
        "types_count" : { "value_count" : { "field" : "type" } }
    }
}

返回如下:

{
    ...
    "aggregations": {
        "types_count": {
            "value": 7
        }
    }
}