Elasticsearch聚合分析(一)——Metric聚合分析 2021/5/25

  • Post author:
  • Post category:其他




Elasticsearch聚合分析



什么是聚合分析

简介:

聚合分析

,英文为

Aggregation

,是es除搜索功能外提供的针对es数据做统计分析的功能

  • ES提供多种分析方式: Bucket、Metric、Pipeline 等
  • Bucket,分桶类型,类似SQL语法中的group by语法。
  • Metric,指标分析类型,如计算最大值,最小值,平均值等等。
  • Pipeline,管道分析类型,基于上一级的聚合分析结果进行再分析。
  • Matrix,矩阵分析类型。



Metric聚合分析

  • Metric分析分类

    • 1.单值分析:只输出一个分析结果。

      • min(最小值)
      • max(最大值)
      • avg(平均值)
      • sum(总和)
      • cardinality(计算数目的,类似sql中的distinct count)
    • 2.多值分析,输出多个分析结果

      • stats(多样统计分析,可以一次性得到最小值,最大值,平均值,中值等等)、
      • extended stats、percentile(百分位数的统计)、
      • percentile rank、top hits(排在前面的结果列表)


单值:最小值
GET /linGuanlink/_search
{
  "size": 0,					// 不需要返回文档列表
  "aggs": {
    "min_age": {					// 自定义聚合名称
      "min": {					// 聚合类型
        "field": "age"
      }
    }
  }
}


单值:最大值
GET /linGuanlink/_search
{
  "size": 0,
  "aggs": {
    "max_age": {
      "max": {
        "field": "age"
      }
    }
  }
}


单值:平均值
GET /linGuanlink/_search
{
  "size": 0,
  "aggs": {
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}


单值:求和
GET /linGuanlink/_search
{
  "size": 0,
  "aggs": {
    "sum_age": {
      "sum": {
        "field": "age"
      }
    }
  }
}


单值:多个结果
GET /linGuanlink/_search
{
 "size": 0,
 "aggs": {
   "min_age": {
     "min": {
       "field": "age"
     }
   },
   "sum_age": {
     "sum": {
       "field": "age"
     }
   }
 }
}


多值:Stats
  • 多值分析之Stats,返回一系列数值类型的统计值,包含min、max、avg、sum和count
GET /linGuanlink/_search
{
 "size": 0,
 "aggs": {
   "stats_age": {
     "stats": {
       "field": "age"
     }
   }
 }
}


多值:Extended Stats
  • 多值分析之Extended Stats,对stats的扩展,包含了更多的统计数据,如方差,标准差等等
GET /linGuanlink/_search
{
 "size": 0,
 "aggs": {
   "stats_age": {
     "extended_stats": {
       "field": "age"
     }
   }
 }
}


多值:percentile
  • 多值分析之percentile,百分位数统计,percentiles是关键词。

  • 计算99%数据年龄在多少以下(50%年龄的21岁以下)

GET /linGuanlink/_search
{
 "size": 0,
 "aggs": {
   "per_age": {
     "percentiles": {
       "field": "age",
       "percents": [
         1,
         5,
         25,
         50,
         75,
         95,
         99
       ]
     }
   }
 }
}

在这里插入图片描述



多值:percentile_ranks
  • 14岁及其以下,所占的比例
GET /linGuanlink/_search
{
 "size": 0,
 "aggs": {
   "per_rank_age": {
     "percentile_ranks": {
       "field": "age",
       "values": [
         14,
         18,
         26
       ]
     }
   }
 }
}


多值:top hits
  • 多值分析之top hits,一般用于分桶后获取该桶内最匹配的顶部文档列表,即详情数据
  • top_hits的作用就是在每个组下面的数据进行筛选

    size:每组显示的数据

    sort:每组的排序
GET /linGuanlink/_search
{
 "size": 0,
 "aggs": {
   "group_agg": {
     "terms": {
       "field": "age",
       "size": 10
     },
     "aggs": {
       "top_data": {
         "top_hits": {
           "size": 2,
           "sort": [
             {
               "age": {
                 "order": "desc"
               }
             }
           ]
         }
       }
     }
   }
 }
}



版权声明:本文为LiGuanLink原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。