ElasticSearch-聚合查询aggs(八)

本文详细介绍了Elasticsearch中的聚合查询,包括如何使用max、min、avg等聚合函数获取数据的统计信息。通过示例展示了如何进行分组查询,如terms桶和filter桶的应用,以便对数据进行更细粒度的分析,获取不同分组下的最小值、最大值和平均值。此外,还展示了如何通过设置size参数优化查询速度。
摘要由CSDN通过智能技术生成

参考文档,点击此处

聚合查询可以想象成就是mysql的group by分组查询,使用聚合函数min,max,sum,avg进行聚合,返回的是一条数据

聚合的模板

在这里插入图片描述

聚合查询

一个aggs里可以有很多个聚合,每个聚合彼此间都是独立的

以下语句的含义就是查询出爱好是网吧的数据,然后对age字段进行最小值,最大值,平均值的获取
GET /ems/_search?size=0   ##如果有些情况不在意查询结果是什么,而只在意aggs的结果,可以把size设为0,如此可以让返回的hits结果集是0,加快返回的速度
{
  "query": {
    "match": {
      "hobby": "网吧"
    }
  },
  "aggs": {
    "max_age": {
      "max": {
        "field": "age"
      }
    },
    "min_age": {
      "min": {
        "field": "age"
      }
    },
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}
执行结果:
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "max_age" : {
      "value" : 30.0
    },
    "avg_age" : {
      "value" : 18.333333333333332
    },
    "min_age" : {
      "value" : 12.0
    }
  }
}

聚合中常用的桶 terms、filter

说白了这些桶其实就是对已经查询出来的数据再进行细粒度的二次查询,然后取出细粒度查询出来的最小值,最大值,平均值,和或者总条数等等

Terms桶

GET /ems/_search?size=0
{
  "query": {
   "match_all": {}
  },
  "aggs": {
    "max_age": {
      "max": {
        "field": "age"
      }
    },
    "min_age": {
      "min": {
        "field": "age"
      }
    },
    "avg_age": {
      "terms": {
        "field": "hobby"       #根据hobby进行分组,并获取分组之后最小的年龄
      },
      "aggs": {
        "in_avg_age": {
          "min": {
            "field": "age"
          }
        }
      }
    }
  }
}
执行结果:
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 6,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "max_age" : {
      "value" : 30.0
    },
    "avg_age" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "网吧",
          "doc_count" : 3,
          "in_avg_age" : {
            "value" : 12.0
          }
        },
        {
          "key" : "k8s运维大佬",
          "doc_count" : 2,
          "in_avg_age" : {
            "value" : 18.0
          }
        },
        {
          "key" : "前端大佬",
          "doc_count" : 1,
          "in_avg_age" : {
            "value" : 19.0
          }
        }
      ]
    },
    "min_age" : {
      "value" : 12.0
    }
  }
}

Filter桶(带子聚合)

GET /ems/_search?size=0
{
  "query": {
   "match_all": {}
  },
  "aggs": {
    "max_age": {                //获取最大年龄
      "max": {
        "field": "age"
      }
    },
    "min_age": {             //获取最小年龄
      "min": {
        "field": "age"
      }
    },
    "avg_age": {           //子聚合:获取hobby为k8s运维大佬数据中年龄最小的的
      "filter": {
        "bool": {
          "must":{
            "match":{
               "hobby":"k8s运维大佬"
            }
          }
        }
      },
      "aggs": {
        "in_avg_age": {
          "min": {
            "field": "age"
          }
        }
      }
    }
  }
}
执行结果:
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 6,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "max_age" : {
      "value" : 30.0
    },
    "avg_age" : {
      "doc_count" : 2,
      "in_avg_age" : {
        "value" : 18.0
      }
    },
    "min_age" : {
      "value" : 12.0
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值