当前位置:   article > 正文

Elasticsearch的聚集统计,可以进行各种统计分析_elastisearch 数据统计

elastisearch 数据统计

说明Elasticsearch不仅是一个大数据搜索引擎,也是一个大数据分析引擎。它的聚集(aggregation)统计的REST端点可用于实现与统计分析有关的功能。Elasticsearch提供的聚集分为三大类。

  1. 度量聚集(Metric aggregation):度量聚集可以用于计算搜索结果在某个字段上的数量统计指标,比如平均值、最大值、最小值、总和等。
  2. 桶聚集(Bucket aggregation):桶聚集可以在某个字段上划定一些区间,每个区间是一个“桶”,然后按照搜索结果的文档内容把文档归类到它所属的桶中,统计的结果能明确每个桶中有多少文档。桶聚集还可以嵌套其他的桶聚集或者度量聚集来进行一些复杂的指标计算。
  3. 管道聚集(Pipeline aggregation):管道聚集就是把桶聚集统计的结果作为输入来继续做聚集统计,会在桶聚集的结果中追加一些额外的统计数据。

1.1、平均值聚集

平均值聚集用来计算索引中某个数值字段的平均值,对索引sougoulog的字段rank求平均值的聚集请求如下。

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   }
  },
  "size": 0,
  "aggs": {
   
    "rank_avg": {
   
      "avg": {
   
        "field": "rank",
        "missing": 0
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这个请求中,aggs的参数使用了一个类型为avg的聚集,它会对rank字段求平均值,请求中的missing参数表示如果遇到rank字段为null的文档,则当作0计算。这一聚集被命名为rank_avg,当然得新建索引,添加数据。

1.2 最大值和最小值聚集

使用最大值和最小值聚集可以快速地得到搜索结果中某个数值字段的最大值、最小值,例如,获取rank字段的最大值的请求如下。

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   }
  },
  "size": 0,
  "aggs": {
   
    "rank_max": {
   
      "max": {
   
        "field": "rank",
        "missing": 0
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

同理,如果要得到rank字段的最小值,把聚集类型设置为min即可。

1.3 求和聚集

与平均值聚集类似,求和聚集可以让搜索结果在某个数值字段上求和。

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   }
  },
  "size": 0,
  "aggs": {
   
    "rank_sum": {
   
      "sum": {
   
        "field": "rank",
        "missing": 0
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

1.4 统计聚集统计

聚集可以一次性返回搜索结果在某个数值字段上的最大值、最小值、平均值、个数、总和。

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   }
  },
  "size": 0,
  "aggs": {
   
    "rank_stats": {
   
      "stats": {
   
        "field": "rank",
        "missing": 0
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2.1 百分比聚集

百分比聚集用于近似地查看搜索结果中某个字段的百分比分布数据,你可以根据搜索结果清晰地看出某个值以内的数据在整体数据集中的占比。例如,对sougoulog的rank字段做百分比聚集的请求如下。

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   }
  },
  "size": 0,
  "aggs": {
   
    "rank_percent": {
   
      "percentiles": {
   
        "field": "rank"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.2 百分比等级聚集

百分比等级聚集跟百分比聚集的参数恰好相反,传入一组值,就可以看到这个值以内的数据占整体数据的百分比。例如:

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   }
  },
  "size": 0,
  "aggs": {
   
    "percent_ranks": {
   
      "percentile_ranks": {
   
        "field": "rank",
        "values": [ 10, 50 ]
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这个聚集请求中,把聚集类型设置为percentile_ranks表示发起百分比等级聚集,values用来设置需要查看的rank值,可以得到以下结果。

"aggregations" : {
   
    "percent_ranks" : {
   
      "values" : {
   
        "10.0" : 82.98,
        "50.0" : 94.22
      }
    }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这个结果表明,有82.98%的文档rank值小于等于10,有94.22%的文档rank值小于等于50。

2 桶聚集

桶聚集会按照某个字段划分出一些区间,把搜索结果的每个文档按照字段所在的区间划分到桶中,桶聚集会返回每个桶拥有的文档数目。桶的数目既可以用参数确定,也可以在执行过程中按照数据内容动态生成。桶的默认上限数目是65535,返回的桶数目超过这个数目会报错。另外,桶聚集可以嵌套其他的聚集来得到一些复杂的统计结果,度量聚集是不能嵌套其他子聚集的。

2.1 范围聚集范围

聚集需要你提供一组左闭右开的区间,在返回的结果中会得到搜索结果的某个字段落在每个区间的文档数目,参数from用于提供区间下界,to用于提供区间上界。统计的字段既可以是数值类型的字段也可以是日期类型的字段。例如:

POST sougoulog/_search
{
   
  "query": {
   
    "match_all": {
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/994853
推荐阅读
相关标签
  

闽ICP备14008679号