elasticsearch聚合(sql group by)

  作者:会飞的

elasticsearch聚合(sql group by)“elasticsearch 里面桶的叫法和 SQL 里面分组的概念是类似的,一个桶就类似 SQL 里面的一个 group,多级嵌套的 aggregation, 类似 SQL 里面的多字段分组(group by field1,field2, …..),注意这里仅仅是概念类似,底层的实现原理是不一样的。terms 桶基于我们的数据动态构建桶;它并不知道到底生成了多少桶。 大多数时候对单个字段的聚合查询还是非常快的, 但是

elasticsearch聚合(sql group by)

“elasticsearch 里面桶的叫法和 SQL 里面分组的概念是类似的,一个桶就类似 SQL 里面的一个 group,多级嵌套的 aggregation, 类似 SQL 里面的多字段分组(group by field1,field2, …..),注意这里仅仅是概念类似,底层的实现原理是不一样的。

terms 桶基于我们的数据动态构建桶;它并不知道到底生成了多少桶。 大多数时候对单个字段的聚合查询还是非常快的, 但是当需要同时聚合多个字段时,就可能会产生大量的分组,最终结果就是占用 es 大量内存,从而导致 OOM 的情况发生。

GET /test/type/_search

{

 "query": {

   "constant_score": {

     "filter": {

       "bool": {

         "must": [

           {

             "term": {

               "state": 1

             }

           }

         ]

       }

     }

   }

 },

   "size": 0,

   "aggs" : {

       "group_by_tags" : {

           "terms" : { "field" : "source" }

       

       }

   }

}

结果:

{

 "took" : 1432,

 "timed_out" : false,

 "_shards" : {

   "total" : 35,

   "successful" : 35,

   "skipped" : 0,

   "failed" : 0

 },

 "hits" : {

   "total" : 16,

   "max_score" : 0.0,

   "hits" : [ ]

 },

 "aggregations" : {

   "group_by_tags" : {

     "doc_count_error_upper_bound" : 0,

     "sum_other_doc_count" : 0,

     "buckets" : [

       {

         "key" : 2,

         "doc_count" : 11

       },

       {

         "key" : 5,

         "doc_count" : 5

       }

     ]

   }

 }

}


有用  |  无用

猜你喜欢