• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Still_Walking

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

elasticsearch aggs里再按条件聚合数据

elasticsearch aggs里再按条件聚合数据

elasticsearch支持很强大的数据处理功能,在聚合数据方面,elasticsearch提供了很多的api,具体请参考elasticsearch官网。

这里只简单说一下如何多重聚合数据。

 1、最简单的聚合数据,相当于mysql里的group by

比如,再现在按照公司来聚合数据:

  {
        "aggs": {
            "companies": {
                "terms": {
                    "field": "company",
                    "size": 0
                }
            }
        },
        "size": 0
    }

执行后,结果里将会包含这样的数据:

"companies":{
        "doc_count_error_upper_bound":0,
        "sum_other_doc_count":0,
        "buckets":[
            {
                "key":"company1",
                "doc_count":90
            },
            {
                "key":"company2",
                "doc_count":1
            }
        ]
    }

2、在结果里增加另外字段的聚合结果,相当于mysql里group by两个字段

比如,再现在按照公司来聚合数据,然后再按部门聚合数据:

  {
        "aggs": {
            "companies": {
                "terms": {
                    "field": "company",
                    "size": 0
                },

      "aggs": {
                      "developments": {
                          "terms": {
                              "field": "development",
                              "size": 0
                          }
                      }
                  }
            }
        },
        "size": 0
    }

执行后,结果里将会包含这样的数据:

"companies":{
        "doc_count_error_upper_bound":0,
        "sum_other_doc_count":0,
        "buckets":[
            {
                "key":"company1",
                "doc_count":90,
                "developments":{
                    "doc_count_error_upper_bound":0,
                    "sum_other_doc_count":0,
                    "buckets":[
                        {
                            "key":"部门1",
                            "doc_count":20
                        }
                    ]
                }
            },
            {
                "key":"company2",
                "doc_count":1,
                "developments":{
                    "doc_count_error_upper_bound":0,
                    "sum_other_doc_count":0,
                    "buckets":[
                        {
                            "key":"部门2",
                            "doc_count":10
                        }
                    ]
                }
            }
        ]
    }

3、再增强一下,按照某个日期以后添加的部门数据

{
        "aggs": {
            "companies": {
                "terms": {
                    "field": "company",
                    "size": 0
                },

      "aggs": {
                      "developments": {
                          "date_range": {
                            "field": "createtime",
                            "format": "yyy-MM-dd",
                            "ranges": [
                                {
                                    "from": "now-10M/M"
                                }
                            ]
                        }
                      }
                  }
            }
        },
        "size": 0
    }

执行后,结果里将会包含这样的数据:

"companies":{
        "doc_count_error_upper_bound":0,
        "sum_other_doc_count":0,
        "buckets":[
            {
                "key":"company1",
                "doc_count":90,
                "developments":{
                    "doc_count_error_upper_bound":0,
                    "sum_other_doc_count":0,
                    "buckets":[
                        {
                            "key": "2017-06-15-*",
             "from": 1497484800000,
             "from_as_string": "2017-06-15",
             "doc_count": 8
                        }
                    ]
                }
            },
            {
                "key":"company2",
                "doc_count":1,
                "developments":{               
                    "buckets":[
                        {
                               "key": "2017-06-15-*",
              "from": 1497484800000,
              "from_as_string": "2017-06-15",
              "doc_count": 3
                        }
                    ]
                }
            }
        ]
    }

这里的子部门数据是从2017-06-15开始到现在添加的。

 

还有很多其它的聚合方法,请到官网查看。

posted on 2017-06-15 16:45  limanxian  阅读(1557)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3