栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch-聚合查询aggs(八)

ElasticSearch-聚合查询aggs(八)

参考文档,点击此处

聚合查询可以想象成就是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
    }
  }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号