ES操作随笔之多层聚合查询到底该怎么写?

{
   // 这是查询
   "query": {
      "bool": {
         "must": [
            {
               "range": {
                  "catm": {
                      // 这里的时间范围会影响到我们后面的对时间的聚合
                     "from": "2018-12-29T00:00:00Z",
                     "to": "2019-01-04T23:59:59Z"
                  }
               }
            },
            {	
               "terms": {
                  // 这里的查询其实和下面的二层聚合字段是一样的
                  "newa": [
                     ........ // 这里我查的是什么就不展示了,公司数据~
                  ]
               }
            }
         ]
      }
   },
   // 因为做聚合查询,所以这里我们返回0个source
   "size": 0,
   // 聚合块->一级
   "aggs": {
       // 一定要指定别名
      "data": {
         // 首先对时间按照天为单位聚合
         "date_histogram": {
            "field": "catm",
            "interval": "day",
            "format": "yyyy-MM-dd"
         },
          // 聚合块->二级
         "aggs": {
             // 其实多层聚合重不重名无所谓,只要自己看着舒服即可
            "data": {
            	// 指定聚合字段
               "terms": {
                  "field": "newa",
                   // 返回结果已经按照doc_count进行了排序,所以如果我们要返回所有的结果,那么这里设置一个比聚合结果数量大的一个数即可
                  "size": 100
               },
                // 聚合块->三级
               "aggs": {
                  "subdata": {
                     "terms": {
                        "field": "vccl"
                     	// 这里不指定size就默认返回十个聚合结果
                     }
                  }
               }
            }
         }
      }
   }
}

现在看看返回结果结构:

"aggregations": {
      "data": {
      	 // 一层聚合结果
         "buckets": [
            {
               "key_as_string": "2018-12-29",
               "key": 1546041600000,
               "doc_count": 54468,
               "data": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  // 二层聚合结果
                  "buckets": [
                     {
                        "key": "这个key就不展示了",
                        "doc_count": 7819,
                        "subdata": {
                           "doc_count_error_upper_bound": 0,
                           "sum_other_doc_count": 0,
                           // 三层聚合结果
                           "buckets": [
                              {
                                 "key": 2,
                                 "doc_count": 6321
                              },
                              {
                                 "key": 1,
                                 "doc_count": 1498
                              }
                           ]
                        }
                     }
// 后面的数据我就不展示啦啊哈哈哈

数据出来各位自行写入excel等文件即可。
一般三层聚合结果组织可以用 “文件 -> sheet -> 行” 即可

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 Elasticsearch 中,聚合操作是一种非常强大的数据分析工具,可以从数据中提取有意义的信息,帮助我们更好地了解数据。下面是一个简单的例子,演示如何使用聚合操作并显示其他字段。 假设你有一个存储了用户行为数据的索引,其中包含了用户的 ID、行为类型、行为时间等字段。现在,你想要对这些数据进行聚合分析,以了解不同用户的行为模式和时间分布情况,并在结果中显示用户的 ID。 以下是一个示例查询: ``` GET user_behavior/_search { "size": 0, "aggs": { "user_count": { "cardinality": { "field": "user_id" } }, "behavior_type": { "terms": { "field": "behavior_type" }, "aggs": { "time_distribution": { "date_histogram": { "field": "behavior_time", "interval": "day" } } } } } } ``` 这个查询使用了两个聚合操作: 1. `cardinality` 聚合操作统计了不同用户的数量,即用户总数。 2. `terms` 聚合操作按照行为类型进行分组,并在每个分组中使用 `date_histogram` 对行为时间进行分组,并且设置了按天进行时间间隔分组。 这个查询将返回一个包含聚合结果的响应体,其中包括了用户总数和每个行为类型的时间分布情况。此外,还可以看到每个行为类型的结果中包含了用户的 ID 字段。 需要注意的是,如果想要在聚合结果中显示其他字段,需要在聚合操作中添加该字段。例如,在上面的查询中,如果你还想要显示用户的姓名字段,需要将其添加到 `terms` 聚合操作中。 希望这个例子能够帮助你更好地理解 Elasticsearch 中的聚合操作,并且能够借此了解如何在聚合结果中显示其他字段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值