首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch -按工作日和小时进行嵌套聚合

Elasticsearch -按工作日和小时进行嵌套聚合
EN

Stack Overflow用户
提问于 2019-11-19 20:34:17
回答 1查看 366关注 0票数 0

在我们的索引(AWS Elasticsearch,7.1)中,我有以下简化结构的文档:

代码语言:javascript
复制
{
  "weekday" : {
     "type" : "long"
   },
  "start_datetime" : {
     "type" : "date",
     "format" : "yyyy/MM/dd'T'HH:mm:ss"
  },
  "count" : {
    "type" : "long"
   }
}

对于分析,我希望首先按工作日进行汇总,然后按小时进行汇总,最后汇总最终存储桶中所有文档的计数字段。我尝试过以下几种方法:

代码语言:javascript
复制
 "aggs": {
    "WEEKDAY": {
      "terms": {
        "field": "weekday"
      },
      "aggs": {
        "HOUR": {
         "date_histogram": {
            "field": "start_datetime",
            "interval": "hour", 
            "format": "HH:mm:ss"
         },
         "aggs": {
          "SUM": {
            "sum": {
              "field": "count"
            }
          }
        }
      }
    }
  }
}

Elasticsearch返回7个工作日存储桶,如果在一周的日期时间范围内运行它(没有重复的工作日),则运行得很好。当在超过7天(例如一个月)的时间范围内运行时,它还返回7个工作日存储桶,但这些存储桶不仅包含此工作日的特定文档的小时数,还包含所有其他工作日的小时数。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-21 00:30:58

我通过使用无痛脚本解决了这个问题。如果有人需要他/她的项目的解决方案:

代码语言:javascript
复制
"aggs": {
   "WEEKDAY": {
      "terms": {
         "field": "weekday",
         "order" : { "_key" : "asc" }
      },
      "aggs": {
         "HOUR": {
            "histogram": {
               "script": "doc['start_datetime'].value.getHourOfDay()",
               "interval": 1,
               "min_doc_count": 0,
               "extended_bounds": {
                  "min": 0,
                  "max": 23
                },
                "order": {
                    "_key": "asc"
                }
              },
             "aggs": {
                "SUM": {
                  "sum": {
                     "field": "count"
                   }
                 }
               }
             }
           }
         }
       }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58934256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档