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开始到现在添加的。

 

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

相关文章:

  • 2021-12-20
  • 2021-07-28
  • 2021-09-06
  • 2022-01-04
  • 2021-07-05
  • 2021-06-29
  • 2021-06-25
猜你喜欢
  • 2022-12-23
  • 2021-11-01
  • 2021-08-18
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案