微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Elasticsearch Date直方图聚合而不考虑年份

如何解决Elasticsearch Date直方图聚合而不考虑年份

我想汇总有关月份和日期的数据,我正在尝试进行日期直方图汇总,但考虑了完整的日期对象。

我有类似的数据:

      {
          "created" : "2020-09-26","id" : 6,"name" : "Halum khamu"      
      },{
          "created" : "2021-09-26","id" : 7,"name" : "new new"
      },{
          "created" : "2020-10-07","id" : 8,"name" : "Halum new"
      }

我正在使用此查询

GET /regulations/_search/
{
  "aggs": {
    "news_over_time": {
      "date_histogram": {
        "field": "created","calendar_interval": "day","keyed": true,"format": "yyy-MM-dd","min_doc_count": 1
      }
    }
  }
}

它为我返回数据:

      "buckets" : {
        "2020-09-26" : {
          "key_as_string" : "2020-09-26","key" : 1600300800000,"doc_count" : 1
        },"2021-09-26" : {
          "key_as_string" : "2021-09-26","key" : 1601337600000,"2020-10-07" : {
          "key_as_string" : "2020-10-07","key" : 1632873600000,"doc_count" : 1
        }
      }

但是我的预期产量将不考虑年份:

      "buckets" : {
        "09-26" : {
          "key_as_string" : "09-26","doc_count" : 2
        },"10-07" : {
          "key_as_string" : "10-07","doc_count" : 1
        }
      }

我该怎么做?

解决方法

没有直接的方法可以解决此问题,但这应该可以完成工作:

GET regulations/_search
{
  "size": 0,"aggs": {
    "day_histogram": {
      "scripted_metric": {
        "init_script": "state.day_map = [:];","map_script": """
          def created = doc.created.value;
          
          def month = created.getMonthOfYear();
          def day = created.getDayOfMonth();
          
          def key = String.format('%02d',new def[] { month })  
                    + '-' + 
                    String.format('%02d',new def[] { day });
          
          if (state.day_map.containsKey(key)) {
            state.day_map[key] += 1;
          } else {
            state.day_map[key] = 1;
          }
        ""","combine_script": "return state.day_map","reduce_script": "return states"
      }
    }
  }
}

屈服

{
  ...
  "aggregations":{
    "day_histogram":{
      "value":[
        {
          "09-26":2,"10-07":1
        }
      ]
    }
  }
}

编辑-实际上有一种更简单的方法:

GET regulations/_search
{
  "size": 0,"aggs": {
    "day_histogram": {
      "terms": {
        "script": {
          "source": "doc.created.value.monthOfYear + '-' + doc.created.value.dayOfMonth"
        },"size": 10
      }
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?