Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation

什么是聚合(Aggregation)
1、 elasticsearch 除了搜索以外,提供的针对ES数据进行统计分析的功能

         实时性高、Hadoop(T+1)

2、通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档

3、高性能,只需要一套语句,就可以从Elasticsearch得到分析结果(无需在客户端自己去实现分析逻辑)

集合的分类
  Aggregation共分为三种:Metric Aggregations、Bucket Aggregations、 Pipeline Aggregations、Matrix Aggregations。

         

Metric Aggregations 主要是做 一系列的统计,Bucket Aggregations相当于分组。

       

准备测试数据:

PUT zhifou/_doc/1
{
  "name":"顾老二",
  "age":30,
  "from": "gu",
  "desc": "皮肤黑、武器长、性格直",
  "tags": ["黑", "长", "直"]
}
 
PUT zhifou/_doc/2
{
  "name":"大娘子",
  "age":18,
  "from":"sheng",
  "desc":"肤白貌美,娇憨可爱",
  "tags":["白", "富","美"]
}
 
PUT zhifou/_doc/3
{
  "name":"龙套偏房",
  "age":22,
  "from":"gu",
  "desc":"mmp,没怎么看,不知道怎么形容",
  "tags":["造数据", "真","难"]
}
 
 
PUT zhifou/_doc/4
{
  "name":"石头",
  "age":29,
  "from":"gu",
  "desc":"粗中有细,狐假虎威",
  "tags":["粗", "大","猛"]
}
 
PUT zhifou/_doc/5
{
  "name":"魏行首",
  "age":25,
  "from":"广云台",
  "desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!",
  "tags":["闭月","羞花"]
}
Bucket Aggregations  的api 介绍
   下面例子使用 term是 进行分桶

   
分组查询
     现在我想要查询所有人的年龄段,并且按照15~20,20~25,25~30分组,并且算出每组的平均年龄。

分析需求,首先我们应该先把分组做出来。

GET zhifou/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      }
    }
  }
}
 

Metric Aggregations  的api 介绍
   1 Avg Aggregation  #计算出字段平均值
     做聚合分析,应该讲size 设置为0,否则会返回查询结果。写20,aggs的相关结果会出现在比较后面而已

 

      现在的需求是查询from是gu的人的平均年龄。 

POST zhifou/_search
{
  "size": 0, 
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "age_ave": {
      "avg": {
        "field": "age"
      }
    }
  }
}
   上例中,首先匹配查询from是gu的数据。在此基础上做查询平均值的操作,这里就用到了聚合函数,其语法被封装在aggs中,而age_ave则是为查询结果起个别名,封装了计算出的平均值。那么,要以什么属性作为条件呢?是age年龄,查年龄的什么呢?是avg,查平均年龄。

2   Max Aggregation  #求最大值
GET zhifou/_search
{
  "aggs": {
    "my_max": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0
}
3 Min Aggregation #求最小值
  

GET zhifou/_search
{
  "aggs": {
    "my_min": {
      "min": {
        "field": "age"
      }
    }
  },
  "size": 0
}
4 Sum Aggregation #求和
 "aggs" : {
        "intraday_return" : { "sum" : { "field" : "change" } }
    }
5 Stats Aggregation  #最大、最小、和、平均值。一起求出来
GET zhifou/_search
{
  "aggs": {
    "my_stats": {
      "stats": {
        "field": "age"
      }
    }
  },
  "size": 0
}
6 Extended Stats Aggregation #字段的其他属性,包括最大最小,方差等等。
GET zhifou/_search
{
  "aggs": {
    "my_extended_stats": {
      "extended_stats": {
        "field": "age"
      }
    }
  },
  "size": 0
}
7 Cardinality Aggregation  #计算出字段的唯一值。相当于sql中的distinct
{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author"
            }
        }
    }
}
8 Geo Bounds Aggregation 
    计算出所有的地理坐标将会落在一个矩形区域。比如说朝阳区域有很多饭店,我就可以用一个矩形把这些饭店都圈起来,看看范围。

{
    "query" : {
        "match" : { "business_type" : "shop" }
    },
    "aggs" : {
        "viewport" : {
            "geo_bounds" : {
                "field" : "location", 
                "wrap_longitude" : true 
            }
        }
    }
}
9 Geo Centroid Aggregation
     计算出所有文档的大概的中心点。比如说某个地区盗窃犯罪很多,那我这样就可以看到这片区域到底哪个点(街道)偷盗事件最猖狂。

{
    "query" : {
        "match" : { "crime" : "burglary" }
    },
    "aggs" : {
        "centroid" : {
            "geo_centroid" : {
                "field" : "location" 
            }
        }
    }
}
10 Percentiles Aggregation
     百分比统计。可以看出你网站的所有页面。加载时间的差异

{
    "aggs" : {
        "load_time_outlier" : {
            "percentiles" : {
                "field" : "load_time" 
            }
        }
    }
}
11 Percentile Ranks Aggregation
     看看15毫秒和30毫秒内大概有多少页面加载完。

{
    "aggs" : {
        "load_time_outlier" : {
            "percentile_ranks" : {
                "field" : "load_time", 
                "values" : [15, 30]
            }
        }
    }
}
12 Top hits Aggregation
{
    "aggs": {
        "top-tags": {
            "terms": {
                "field": "tags",
                "size": 3
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {
                        "sort": [
                            {
                                "last_activity_date": {
                                    "order": "desc"
                                }
                            }
                        ],
                        "_source": {
                            "include": [
                                "title"
                            ]
                        },
                        "size" : 1
                    }
                }
            }
        }
    }
}
13 alue Count Aggregation  #数量统计,看看这个字段一共有多少个不一样的数值。
{
    "aggs" : {
        "grades_count" : { "value_count" : { "field" : "grade" } }
    }
}
嵌套
在kabana导入 航空信息

#查看航班目的地的统计信息,增加平均,最高最低价格
GET kibana_sample_data_flights/_search
{
    "size": 0,
    "aggs":{
        "flight_dest":{
            "terms":{
                "field":"DestCountry"
            },
            "aggs":{
                "avg_price":{
                    "avg":{
                        "field":"AvgTicketPrice"
                    }
                },
                "max_price":{
                    "max":{
                        "field":"AvgTicketPrice"
                    }
                },
                "min_price":{
                    "min":{
                        "field":"AvgTicketPrice"
                    }
                }
            }
        }
    }
}
 
#价格统计信息+天气信息
GET kibana_sample_data_flights/_search
{
    "size": 0,
    "aggs":{
        "flight_dest":{
            "terms":{
                "field":"DestCountry"
            },
            "aggs":{
                "stats_price":{
                    "stats":{
                        "field":"AvgTicketPrice"
                    }
                },
                "wather":{
                  "terms": {
                    "field": "DestWeather",
                    "size": 5
                  }
                }
 
            }
        }
    }
}
 
————————————————
版权声明:本文为CSDN博主「坤仔1」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36697880/article/details/100746129

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值