ElasticSearch聚合操作详解

Elasticsearch除搜索以外,提供了针对ES 数据进行统计分析的功能。聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

  • 什么品牌的手机最受欢迎?
  • 这些手机的平均价格、最高价格、最低价格?
  • 这些手机每月的销售情况如何?

使用场景

聚合查询可以用于各种场景,比如商业智能、数据挖掘、日志分析等等。

  • 电商平台的销售分析:统计每个地区的销售额、每个用户的消费总额、每个产品的销售量等,以便更好地了解销售情况和趋势。
  • 社交媒体的用户行为分析:统计每个用户的发布次数、转发次数、评论次数等,以便更好地了解用户行为和趋势,同时可以将数据按照地区、时间、话题等维度进行分析。
  • 物流企业的运输分析:统计每个区域的运输量、每个车辆的运输次数、每个司机的行驶里程等,以便更好地了解运输情况和优化运输效率。
  • 金融企业的交易分析:统计每个客户的交易总额、每个产品的销售量、每个交易员的业绩等,以便更好地了解交易情况和优化业务流程。
  • 智能家居的设备监控分析:统计每个设备的使用次数、每个家庭的能源消耗量、每个时间段的设备使用率等,以便更好地了解用户需求和优化设备效能。

基本语法

聚合查询的语法结构与其他查询相似,通常包含以下部分:

  • 查询条件:指定需要聚合的文档,可以使用标准的 Elasticsearch 查询语法,如 term、match、range 等等。
  • 聚合函数:指定要执行的聚合操作,如 sum、avg、min、max、terms、date_histogram 等等。每个聚合命令都会生成一个聚合结果。
  • 聚合嵌套:聚合命令可以嵌套,以便更细粒度地分析数据。

aggs_name:聚合函数的名称
agg_type:聚合种类,比如是桶聚合(terms)或者是指标聚合(avg、sum、min、max等)
field_name:字段名称或者叫域名。

聚合的分类

Metric Aggregation:—些数学运算,可以对文档字段进行统计分析,类比Mysql中的 min(), max(), sum() 操作。

Bucket Aggregation: 一些满足特定条件的文档的集合放置到一个桶里,每一个桶关联一个key,类比Mysql中的group by操作。

Pipeline Aggregation:对其他的聚合结果进行二次聚合

DELETE /meituan_employee

PUT /meituan_employee
{
  "mappings": {
    "properties": {
      "age":{
        "type": "integer"
      },
      "gender":{
        "type": "keyword"
      },
      "job":{
        "type": "text",
        "fields": {
          "keyword":{
            "type":"keyword",
            "ignore_above":50
          }
        
        }
      },
      "name":{
        "type":"keyword"
      },
      "salary":{
        "type": "integer"
      }
    }
  }
}

PUT /meituan_employee/_doc/1
{"name":"Emma","age":32,"job":"Product Manager","gender":"female","salary":35000 }

PUT /meituan_employee/_doc/2
{"name": "Underwood","age":41,"job":"Dev Manager","gender":"male","salary":50000}

PUT /meituan_employee/_doc/3
{"name": "Tran","age":25,"job":"Web Designer","gender":"male","salary":18000}

PUT /meituan_employee/_doc/4
{"name": "Rivera","age":26,"job":"Web Designer","gender":"female","salary": 22000}

PUT /meituan_employee/_doc/5
{"name": "Rose","age":25,"job":"QA","gender":"female","salary":18000}

PUT /meituan_employee/_doc/6
{"name": "Lucy","age":31,"job":"QA","gender":"female","salary":25000}


PUT /meituan_employee/_doc/7
{"name": "Byrd","age":27,"job":"QA","gender":"male","salary":20000 }

PUT /meituan_employee/_doc/8
{"name": "Foster","age":27,"job":"Java Programmer","gender":"male","salary": 20000}

PUT /meituan_employee/_doc/9
{"name" : "Gregory","age":32,"job":"Java Programmer","gender":"male","salary": 22000}

PUT /meituan_employee/_doc/10
{ "name": "Bryant","age":20,"job":"Java Programmer","gender":"male","salary": 9000}

PUT /meituan_employee/_doc/11
{ "name": "Jenny","age":36,"job":"Java Programmer","gender":"female","salary": 38000}

PUT /meituan_employee/_doc/12
{ "name": "Mcdonald","age":31,"job":"Java Programmer","gender":"male","salary": 32000}

PUT /meituan_employee/_doc/13
{"name" : "Jonthna","age":30,"job":"Java Programmer","gender":"female","salary":30000 }

PUT /m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值