我是靠谱客的博主 羞涩太阳,最近开发中收集的这篇文章主要介绍Elasticsearch聚合之指标聚合metrics,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

指标聚合的意思是指此系列中的聚合基于从正在聚合的文档中以某种方式提取的值来计算度量标准。 这些值通常从文档的字段中提取(使用字段数据),但也可以使用脚本生成。例如说数据的平均值,最大值,最小值等等,就是一项统计数据。

基本语法

一般常用的语句是这样的:

{
    "size":0,一般只是为了统计数据,就没必要查询元数据了,设为0就好
    "query":{
    	加上你的查询条件,可选
    },
    "aggs":{
        "max_total":{
        	"max":{"field":"total_num"}
        },
        "avg_online":{
        	"max":{"field":"online_num"}
        }
    }
}

其中max这个地方可以换成min,avg,sum,stats,extended_stats,value_count等等一系列值。
以上语句回得到以下响应,里面包含了我们需要的统计数据:

{
    ...
    "aggregations": {
        "max_total": {
            "value": 75.0
        },
        "avg_online": {
            "value": 75.0
        }
    }
}

也可以使用脚本自定义需要统计的字段信息的,例如:

POST /exams/_search?size=0
{
    "aggs" : {
        "avg_corrected_grade" : {
            "avg" : {
                "field" : "grade",
                "script" : {
                    "lang": "painless",
                    "source": "_value * params.correction", _value就是grade的值
                    "params" : {
                        "correction" : 1.2
                    }
                }
            }
        }
    }
}

也可以设置缺失值:

POST /exams/_search?size=0
{
    "aggs" : {
        "grade_avg" : {
            "avg" : {
                "field" : "grade",
                "missing": 10 缺失值为10
            }
        }
    }
}

统计指标(方法)

es支持一些常用的统计方法,例如max,min,avg这些简单的,还有方差,百分位数等比较高级一些的,max,min,avg,sum这些就不说了,比较简单,替换一些即可。

stats, extended_stats

stats返回count,min,sum,max,avg等基础信息,使用stats就不用一一设置这些基础值了。
返回示例:

{
    ...

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

使用extended_stats则会返回更多统计信息:

{
    ...

    "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
           }
        }
    }
}

percentiles, percentile_ranks

使用percentiles则可以返回百分位数,即各个统计百分比的值。例如:

{
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time" 
            }
        }
    }
}

则会返回load_time各个百分比上的值,默认的百分比是[ 1, 5, 25, 50, 75, 95, 99 ]:

{
    ...

   "aggregations": {
      "load_time_outlier": {
         "values" : {
            "1.0": 15,
            "5.0": 20,
            "25.0": 23,
            "50.0": 25,
            "75.0": 29,
            "95.0": 60,
            "99.0": 150
         }
      }
   }
}

也可以指定返回的样式,例如在聚合时设置keyed为false:

{
    "aggs": {
        "balance_outlier": {
            "percentiles": {
                "field": "balance",
                "keyed": false
            }
        }
    }
}

则会返回这样的结果:

{
    ...

    "aggregations": {
        "balance_outlier": {
            "values": [
                {
                    "key": 1.0,
                    "value": 1462.8400000000001
                },
                {
                    "key": 5.0,
                    "value": 3591.85
                },
                {
                    "key": 25.0,
                    "value": 13709.333333333334
                },
                {
                    "key": 50.0,
                    "value": 26020.11666666667
                },
                {
                    "key": 75.0,
                    "value": 38139.648148148146
                },
                {
                    "key": 95.0,
                    "value": 47551.549999999996
                },
                {
                    "key": 99.0,
                    "value": 49339.16
                }
            ]
        }
    }
}

百分比还可以在聚合时指定:

{
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time",
                "percents" : [95, 99, 99.9] 
            }
        }
    }
}

percentile_ranks则正好相反,给定一组值,返回值所占的百分比:

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

返回示例:

{
    ...

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

同时也支持keyed参数。

最后

以上就是羞涩太阳为你收集整理的Elasticsearch聚合之指标聚合metrics的全部内容,希望文章能够帮你解决Elasticsearch聚合之指标聚合metrics所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部