aggregation 詳解2(metrics aggregations)

概述

權值聚合類型從須要聚合的文檔中取一個值(value)來計算文檔的相應權值(好比該值在這些文檔中的max、sum等)。git

用於計算的值(value)能夠是文檔的字段(field),也能夠是腳本(script)生成的值。spa

數值權值聚合是特殊的權值聚合類型,由於它的輸出權值也是數字。code

數值權值聚合(注意分類只針對數值權值聚合,非數值的無此分類)輸出單個權值的,叫作 single-value numeric metrics,其它生成多個權值(好比:stats)的被叫作 multi-value numeric metrics。blog

單值和多值數字權值聚合,在它們做爲一些 Bucket 聚合的直接子聚合的時候會有明顯區別。排序

Avg Aggregation(single-value numeric metrics)

均值聚合——基於文檔的某個值,計算該值在聚合文檔中的均值。ip

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。ci

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值
{
    "aggs" : {
        "avg_grade" : { "avg" : { "field" : "grade" } }    //計算字段 grade 在文檔中的平均值
    }
}
//輸出
{
    ...

    "aggregations": {
        "avg_grade": {
            "value": 75
        }
    }
}

 

Cardinality Aggregation(single-value)

基數聚合——基於文檔的某個值,計算文檔非重複的個數(去重計數)。文檔

用於計算的值能夠是特定的字段,也能夠經過腳本計算而來。it

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • precision_threshold:
  • missing:文檔缺省字段時的默認值
{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author"  //count the unique authors that match a query
            }
        }
    }
}

 

stats aggregation(multi-value)

統計聚合——基於文檔的某個值,計算出一些統計信息(min、max、sum、count、avg)。io

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值
{
    "aggs" : {
        "grades_stats" : { "stats" : { "field" : "grade" } }
    }
}
//輸出
{
    ...
    "aggregations": {
        "grades_stats": {
            "count": 6,
            "min": 60,
            "max": 98,
            "avg": 78.5,
            "sum": 471
        }
    }
}

 

Extended Stats Aggregation(multi-value)

擴展統計聚合——基於文檔的某個值,計算出一些統計信息(比普通的stats聚合多了sum_of_squares、variance、std_deviationstd_deviation_bounds)。

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值
  • sigma:標準差界限
{
    ...

    "aggregations": {
        "grade_stats": {
           "count": 9,
           "min": 72,
           "max": 99,
           "avg": 86,
           "sum": 774,
           //輸出比 stats 聚合多了一些值
           "sum_of_squares": 67028,
           "variance": 51.55555555555556,
           "std_deviation": 7.180219742846005,
           "std_deviation_bounds": {
            "upper": 100.36043948569201,
            "lower": 71.63956051430799
           }
        }
    }
}

 

Geo Bounds Aggregation

地理邊界聚合——基於文檔的某個字段(geo-point類型字段),計算出該字段全部地理座標點的邊界(左上角/右下角座標點)。

配置參數

  • field:用於計算的字段
  • wrap_longitude:是否容許地理邊界與國際日界線存在重疊
{
    "query" : {
        "match" : { "business_type" : "shop" }
    },
    "aggs" : {
        "viewport" : {
            "geo_bounds" : {
                "field" : "location", 
                "wrap_longitude" : true 
            }
        }
    }
}
//輸出
{
    ...
    "aggregations": {
        "viewport": {
            "bounds": {
                "top_left": {                    //左上角經緯度
                    "lat": 80.45,
                    "lon": -160.22
                },
                "bottom_right": {               //右下角經緯度
                    "lat": 40.65,
                    "lon": 42.57
                }
            }
        }
    }
}

 

Geo Centroid Aggregation

地理重心聚合——基於文檔的某個字段(geo-point類型字段),計算全部座標的加權重心。

配置參數

  • field:用於計算的字段(geo-point類型)
{
    "query" : {
        "match" : { "crime" : "burglary" }
    },
    "aggs" : {
        "centroid" : {
            "geo_centroid" : {
                "field" : "location" 
            }
        }
    }
}
//輸出
{
    ...
    "aggregations": {
        "centroid": {
            "location": {      //重心經緯度
                "lat": 80.45,
                "lon": -160.22
            }
        }
    }
}

 

Max Aggregation(single)

最大值聚合——基於文檔的某個值,求該值在聚合文檔中的最大值。

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值

Min Aggregation(single)

最小值聚合——基於文檔的某個值,求該值在聚合文檔中的最小值。

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值

Sum Aggregation(single-value)

求和聚合——基於文檔的某個值,求該值在聚合文檔中的統計和。

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值
//最大值,field
{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }      // field 
    }
}
//最小值,script
{
    "aggs" : {
        "min_price" : {
            "min" : {
                "script" : {                            //script 計算 value
                    "file": "my_script",
                    "params": {
                        "field": "price"
                    }
                }
            }
        }
    }
}
//總和,value script 
{
    "aggs" : {
        ...
        "aggs" : {
            "daytime_return" : {
                "sum" : {
                    "field" : "change",                  // field
                    "script" : "_value * _value"        // 基於 field 用 script 計算 value
                }
            }
        }
    }
}

 

Percentiles Aggregation(multi-value)

百分百聚合——基於聚合文檔中某個數值類型的值,求這些值中

用於計算的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
  • missing:文檔缺省字段時的默認值

Script Metric Aggregation

基於腳本的權值聚合——用腳原本計算出一個權值

配置參數

  • init_script:用於計算的字段
  • map_script:由腳本生成用來計算的 value
  • combine_script:文檔缺省字段時的默認值
  • reduce_script:
{
    "query" : {
        "match_all" : {}
    },
    "aggs": {
        "profit": {
            "scripted_metric": {
                "init_script" : "_agg['transactions'] = []",
                "map_script" : "if (doc['type'].value == \"sale\") { _agg.transactions.add(doc['amount'].value) } else { _agg.transactions.add(-1 * doc['amount'].value) }", 
                "combine_script" : "profit = 0; for (t in _agg.transactions) { profit += t }; return profit",
                "reduce_script" : "profit = 0; for (a in _aggs) { profit += a }; return profit"
            }
        }
    }
}

 

Top hits Aggregation

最高匹配權值聚合——跟蹤聚合中相關性最高的文檔。

該聚合通常用作 sub-aggregation,以此來聚合每一個桶中的最高匹配的文檔。

配置參數

  • from:最匹配的結果中的文檔個數偏移
  • size:top matching hits 返回的最大文檔個數(default 3)
  • sort:最匹配的文檔的排序方式
{
    "aggs": {
        "top-tags": {
            "terms": {
                "field": "tags",
                "size": 3
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {                  //用 tags 字段分組,每一個 tag(即一個分組)只顯示最後一個問題,而且只在 _source 中保留 title 字段
                        "sort": [
                            {
                                "last_activity_date": {
                                    "order": "desc"
                                }
                            }
                        ],
                        "_source": {
                            "include": [
                                "title"
                            ]
                        },
                        "size" : 1
                    }
                }
            }
        }
    }
}
//輸出
"top_tags_hits": {
     "hits": {
          "total": 25365,
          "max_score": 1,
          "hits": [
              {
                 "_index": "stack",
                 "_type": "question",
                 "_id": "602679",
                 "_score": 1,
                 "_source": {
                      "title": "Windows port opening"
                 },
                 "sort": [
                      1370143231177
                  ]
               }
           ]
     }
}

 

Value Count Aggregation(single-value)

值計數聚合——計算聚合文檔中某個值的個數。

用於計數的值能夠是特定的數值型字段,也能夠經過腳本計算而來。

該聚合通常域其它 single-value 聚合聯合使用,好比在計算一個字段的平均值的時候,可能還會關注這個平均值是由多少個值計算而來。

配置參數

  • field:用於計算的字段
  • script:由腳本生成用來計算的 value
{
    "aggs" : {
        "grades_count" : { "value_count" : { "field" : "grade" } }    //計算 grade 字段共有多少個值,和 cardinality 聚合不一樣的
    }
}
相關文章
相關標籤/搜索