ElasticSearch聚合操作详解

聚合操作

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

  • 查询条件:指定需要聚合的文档,可以使用标准的 Elasticsearch 查询语法,如 term、match、range 等等。
  • 聚合函数:指定要执行的聚合操作,如 sum、avg、min、max、terms、date_histogram 等等。每个聚合命令都会生成一个聚合结果。
  • 聚合嵌套:聚合命令可以嵌套,以便更细粒度地分析数据。
GET <index_name>/_search
{
   
   
  "aggs": {
   
   
    "<aggs_name>": {
   
    #  聚合名称需要自己定义
      "<agg_type>": {
   
   		# 聚合种类,比如是桶聚合(terms)或者是指标聚合(avg、sum、min、max等)
        "field": "<field_name>"			#  field_name 字段名称或者叫域名。
      }
    }
  }
}

聚合操作一般都是操作的术语级别的字段,一般不会操作text类型的字段



聚合的分类

  • Metric Aggregation:—些数学运算,可以对文档字段进行统计分析,类比Mysql中的 min(), max(), sum() 操作。
GET /sys_user/_search
{
   
   
  "aggs": {
   
   
    "hs_avg_age": {
   
   
      "avg": {
   
   		# 这里还可以使用 max   min 等等
        "field": "age"
      }
    }
  }
}



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

    # 使用terms关键字
    # 类似于关系型数据库的分组操作
    # 先分组 再求和
    GET /sys_user/_search
    {
         
         
      "aggs": {
         
         
        "hs_terms_age": {
         
         
          "terms": {
         
           # 使用terms关键字
            "field": "age"
          }
        }
      }
    }
    

    在这里插入图片描述



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



测试数据

聚合操作一般都是操作术语级别的字段,比较少操作text类型的字段

DELETE /employees
#创建索引库
PUT /employees
{
   
   
  "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 /employees/_bulk
{
   
    "index" : {
   
     "_id" : "1" } }
{
   
    "name" : "Emma","age":32,"job":"Product Manager","gender":"female","salary":35000 }
{
   
    "index" : {
   
     "_id" : "2" } }
{
   
    "name" : "Underwood","age":41,"job":"Dev Manager","gender":"male","salary": 50000}
{
   
    "index" : {
   
     "_id" : "3" } }
{
   
    "name" : "Tran","age":25,"job":"Web Designer","gender":"male","salary":18000 }
{
   
    "index" : {
   
     "_id" : "4" } }
{
   
    "name" : "Rivera","age":26,"job":"Web Designer","gender":"female","salary": 22000}
{
   
    "index" : {
   
     "_id" : "5" } }
{
   
    "name" : "Rose","age":25,"job":"QA","gender":"female","salary":18000 }
{
   
    "index" : {
   
     "_id" : "6" } }
{
   
    "name" : "Lucy","age":31,"job":"QA","gender":"female","salary": 25000}
{
   
    "index" : {
   
     "_id" : "7" } }
{
   
    "name" : "Byrd","age":27,"job":"QA","gender":"male","salary":20000 }
{
   
    "index" : {
   
     "_id" : "8" } }
{
   
    "name" : "Foster","age":27,"job":"Java Programmer","gender":"male","salary": 20000}
{
   
    "index" : {
   
     "_id" : "9" } }
{
   
    "name" : "Gregory","age":32,"job":"Java Programmer","gender":"male","salary":22000 }
{
   
    "index" : {
   
     "_id" : "10" } }
{
   
    "name" : "Bryant","age":20,"job":"Java Programmer","gender":"male","salary": 9000}
{
   
    "index" : {
   
     "_id" : "11" } }
{
   
    "name" : "Jenny","age":36,"job":"Java Programmer","gender":"female","salary":38000 }
{
   
    "index" : {
   
     "_id" : "12" } }
{
   
    "name" : "Mcdonald","age":31,"job":"Java Programmer","gender":"male","salary": 32000}
{
   
    "index" : {
   
     "_id" : "13" } }
{
   
    "name" : "Jonthna","age":30,"job":"Java Programmer","gender":"female","salary":30000 }
{
   
    "index" : {
   
     "_id" : "14" } }
{
   
    "name" : "Marshall","age":32,"job":"Javascript Programmer","gender":"male","salary": 25000}
{
   
    "index" : {
   
     "_id" : "15" } }
{
   
    "name" : "King","age":33,"job":"Java Programmer","gender":"male","salary":28000 }
{
   
    "index" : {
   
     "_id" : "16" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值