Elasticsearch聚合初探——metric篇

Elasticsearch是平等悠悠提供找寻和相关度排序的开源框架,同时,也支持针对存储的文档进行复杂的统计——聚合。

前言

ES中的集合被分成两坏类:Metric度量和bucket桶(原谅自己英语差,找不至当的词语…..就因故单词来说吧!)。说的通俗点,metric很像SQL中之avg、max、min相当艺术,而bucket就来硌类似group by了。

本篇就简单的介绍一下metric聚合的用法。

metric的集合按照值的返路可以分为两种植:单值聚合 和 多值聚合。

单值聚合

Sum 求和

是集返回的凡仅个价,dsl可以参见如下:

"aggs" : {
        "intraday_return" : { "sum" : { "field" : "change" } }
    }

归来的是change字段的以及:

{
    ...

    "aggregations": {
        "intraday_return": {
           "value": 2.18
        }
    }
}

其中intraday_return是集的名,同时为会见作请求返回的id值。另外,聚合中凡是支持脚本的,这里就不过基本上废话了,详细参考官方文档即可。

Min 求最小值

{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

Max 求最大值

{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }
    }
}

avg 求平均值

{
    "aggs" : {
        "avg_grade" : { "avg" : { "field" : "grade" } }
    }
}

cardinality 求唯一值,即非还的字段有微

{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author"
            }
        }
    }
}

大多值聚合

percentiles 求百分比

{
    "aggs" : {
        "load_time_outlier" : {
            "percentile_ranks" : {
                "field" : "load_time", 
                "values" : [15, 30]
            }
        }
    }
}

返回的结果包含多单价值:

{
    ...

   "aggregations": {
      "load_time_outlier": {
         "values" : {
            "15": 92,
            "30": 100
         }
      }
   }
}

stats 统计

{
    "aggs" : {
        "grades_stats" : { "stats" : { "field" : "grade" } }
    }
}

伸手后会一直展示余凑结果:

{
    ...

    "aggregations": {
        "grades_stats": {
            "count": 6,
            "min": 60,
            "max": 98,
            "avg": 78.5,
            "sum": 471
        }
    }
}

extend stats 扩展统计

{
    "aggs" : {
        "grades_stats" : { "extended_stats" : { "field" : "grade" } }
    }
}

在统计的基本功及还增了强苛的统计信息:

{
    ...

    "aggregations": {
        "grade_stats": {
           "count": 9,
           "min": 72,
           "max": 99,
           "avg": 86,
           "sum": 774,
           "sum_of_squares": 67028,
           "variance": 51.55555555555556,
           "std_deviation": 7.180219742846005,
           "std_deviation_bounds": {
            "upper": 100.36043948569201,
            "lower": 71.63956051430799
           }
        }
    }
}

总结

点并从未列举全面,比如2.0版本的ES,还支持多值的percentile
Rank百分比排名,Geo Bounds地理位置信息,Scripted Metric脚本;单值的top
hits等等。

  • 每当性质上,ES也召开了众多底优化:比如max和min,如果对排序的字段,那么就是直跨越了了算的步调,直接取出目标值即可。
  • 理所当然有些聚合也是索要一定的场所的,比如cardinality计算唯一值是透过哈希的主意,如果字段数据规模大充分,那么会损耗很多的性质。
  • 除此以外桶之间是好嵌套的,比如在range聚合下嵌套了一个max聚合,那么会于range得到的每个结果组达,再次进行max的统计。
  • 以联谊中支持脚本的下,可以增加统计的灵活度。

群情节还欲在实践中使用,才会了解它们的优势。

相关文章