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

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

猜你喜欢

转载自blog.csdn.net/LiGuanLink/article/details/117256320