天天看點

elk筆記16--aggs-Metrics Aggregations1 Metrics Aggregations 簡介2 Metrics Aggregations 分類3 注意事項4 說明

elk筆記16--aggs-Metrics Aggregations

  • 1 Metrics Aggregations 簡介
  • 2 Metrics Aggregations 分類
    • 2.1 Avg Aggregation
    • 2.2 Weighted Avg Aggregation
    • 2.3 Max Aggregation
    • 2.4 Min Aggregation
    • 2.5 Sum Aggregation
    • 2.6 Stats Aggregation
    • 2.7 Extended Stats Aggregation
    • 2.8 Cardinality Aggregation
    • 待補充
  • 3 注意事項
  • 4 說明

本文對聚合中的Metrics類型聚合進行進一步介紹,包括基礎概念、常見aggs案例、注意事項等部分,後續将在此子產品持續補充完善Metrics類型的aggs。

1 Metrics Aggregations 簡介

名額類的聚合,在es中主要用于追蹤和計算一個文檔集的屬性。

在名額聚合家族中,聚合可以對一些名額進行計算,這些名額基于從已有的聚合文檔中提取出來的值,這些值一把是從文檔的字段提取的,當然也可以通過腳本産生。

數值類型的名額聚合是一類特有的名額聚合,它輸出一些數字類型的值。其中一類聚合輸出單個數值名額,被稱為單值數值名額聚合,例如求平均數avg;另外一類輸出多個數值名額,被稱作多隻數值名額聚合。當這些聚合充當某些桶聚合的直接子聚合時(一些桶聚合根據桶中的數值屬性,可以使我們對傳回桶進行排序),單值和多值數字名額聚合之間的差別将發揮作用。

2 Metrics Aggregations 分類

2.1 Avg Aggregation

計算指定字段的平均值

GET kibana_sample_data_ecommerce/_search?size=0
{
  "aggs" : {
    "avg_taxful_total_price" : { 
      "avg" : { 
        "field" : "taxful_total_price" 
      } 
    }
  }
}
結果:
{
...
  "aggregations" : {
    "avg_taxful_total_price" : {
      "value" : 1052652.38671875
    }
  }
}
使用腳本擷取指定字段的值:
avg内部的field改為script,source為doc.字段名稱.value
GET kibana_sample_data_ecommerce/_search?size=0
{
  "aggs" : {
    "avg_taxful_total_price" : { 
      "avg" : { 
        "script": {
          "source": "doc.taxful_total_price.value"
        } 
      } 
    }
  }
}
           

2.2 Weighted Avg Aggregation

Weighted Avg 聚合屬于單名額聚合,其作用為計算出帶有權重的平均值,當權重為1的時候就稱為普通的avg聚合了,其計算公式:∑(value * weight) / ∑(weight)

POST /exams/_search
{
    "size": 0,
    "aggs" : {
        "weighted_grade": {
            "weighted_avg": {
                "value": {
                    "field": "grade"
                },
                "weight": {
                    "field": "weight"
                }
            }
        }
    }
}
           

此處value和weight兩個字段是必選字段,也可以根據需要設定 weighted_avg 的 format 和 value_type 字段;此外value和weight也可以按需設定missing字段。

2.3 Max Aggregation

同 avg

2.4 Min Aggregation

同avg

2.5 Sum Aggregation

同avg

2.6 Stats Aggregation

Stats聚合屬于多名額聚合,用于計算文檔中指定字段的多個屬性,包括 min, max, sum, count and avg。

以下以學生成績為案例:

建立索引:
PUT exams
{
  "mappings": {
    "properties": {
      "name":{
        "type": "keyword"
      },
      "grade":{
        "type": "double"
      }
    }
  }
}
寫入2條資料:
PUT exams/_bulk?refresh=true
{ "index":{"_id":1}}
{ "name":"xiaoming","grade":50}
{ "index":{"_id":2}}
{ "name":"zhangsan","grade":100}
stats聚合:
GET exams/_search?size=0
{
  "aggs": {
    "function_stats": {
      "stats": {
        "field": "grade"
      }
    }
  }
}
可選參數: 
"missing":具體數值, 當無grade字段時将會使用指定數值來代替
script(将field更改為如下内容):
"script" : {
  "lang": "painless",
  "source": "doc['grade'].value"
}
script方式擷取字段後,可以設定字段的correction,統計時grade值為原始字段值*correction
"script" : {
  "lang": "painless",
  "source": "doc.grade.value * params.correction",
  "params" : {
    "correction" : 1.2
  }
}
結果:
{
  ...
  "aggregations" : {
    "function_stats" : {
      "count" : 2,
      "min" : 50.0,
      "max" : 100.0,
      "avg" : 75.0,
      "sum" : 150.0
    }
  }
}
           

2.7 Extended Stats Aggregation

Extended Stats聚合屬于多指名額聚合,用于計算文檔中指定字段的多個屬性,它對Stats進行了擴充,包括 sum_of_squares, variance, std_deviation and std_deviation_bounds幾個參數。

以下以學生成績為案例:

extend stats聚合:
GET exams/_search?size=0
{
  "aggs": {
    "function_stats": {
      "extended_stats": {
        "field": "grade",
        "sigma": 1,
        "missing": 0
      }
    }
  }
}
可選參數: 
sigma: 預設為2,
std_deviation_bounds區間為[-2*std_deviation+avg,2*std_deviation+avg],但設定為1後[-std_deviation+avg,std_deviation+avg]
missing: grade缺失時候使用missing值來代替
結果:
{
  ...
  "aggregations" : {
    "function_stats" : {
      "count" : 2,
      "min" : 50.0,
      "max" : 100.0,
      "avg" : 75.0,
      "sum" : 150.0,
      "sum_of_squares" : 12500.0,
      "variance" : 625.0,
      "std_deviation" : 25.0,
      "std_deviation_bounds" : {
        "upper" : 100.0,
        "lower" : 50.0
      }
    }
  }
}
           

2.8 Cardinality Aggregation

Cardinality 聚合屬于單名額聚合,用于計算文檔中指定字段的不同值的數量,即去重後有多少個值

GET exams/_search?size=0
{
    "aggs" : {
        "differ_grade" : {
            "cardinality" : {
                "field" : "grade"
            }
        }
    }
}
輸出:
{
  ..
  "aggregations" : {
    "differ_grade" : {
      "value" : 2
    }
  }
}
此處使用2.2.7中的資料,有2個學生分數不相同,是以為2;若增加底三個學生分數為50,則值仍然為2;若增加底三個學生分數為51,則值仍然為3
           

待補充

3 注意事項

to add

4 說明

測試環境:es 7.2.1

7.2/search-aggregations

es 權威指南:aggs-high-level

繼續閱讀