elasticsearch 如何在elasticsearch中按小时对文档进行分组?,elasticsearch,elasticsearch" /> elasticsearch 如何在elasticsearch中按小时对文档进行分组?,elasticsearch,elasticsearch" />

elasticsearch 如何在elasticsearch中按小时对文档进行分组?

elasticsearch 如何在elasticsearch中按小时对文档进行分组?,elasticsearch,elasticsearch,我的文档在不同的时间被编入索引。现在我需要按每天每小时对这些文档进行分组,即聚合后的存储桶应该显示从00到23的范围。在elasticsearch中可以进行这种排序吗?使用date\u直方图并将格式设置为“k” 如果要按小时对文档进行分组,而不考虑年份、日期和毫秒,则可能需要使用以下聚合: { "aggs": { "perHour": { "terms": { "script": "Date date = new Date(

我的文档在不同的时间被编入索引。现在我需要按每天每小时对这些文档进行分组,即聚合后的存储桶应该显示从00到23的范围。在elasticsearch中可以进行这种排序吗?

使用
date\u直方图
并将
格式设置为
“k”


如果要按小时对文档进行分组,而不考虑年份、日期和毫秒,则可能需要使用以下聚合:

{
    "aggs": {
        "perHour": {
            "terms": {
            "script": "Date date = new Date(doc['dateCreated'].value) ;java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('HH');format.format(date)"
            }
        }
    }
}
HH意味着我们想要得到一天中的时间。您将得到24个桶,每个桶对应一小时。这也适用于星期几统计数据,如中所述

如果您希望为每一天设置每小时一次的存储桶,请使用date_直方图解决方案:

{
"aggs": {
  "Group By Date": {
     "date_histogram": {
        "field": "dateCreated",
        "interval": "hour",
        "format" : "k"
        }
     }
  }
}

可能会晚到派对,但使用Elasticsearch无法直接实现这种聚合。不过,有两种变通方法:

  • 在编制索引时,可以将小时字段存储为单独的字段
  • 您可以使用Elasticsearch提供的直方图,并将结果合并到应用程序代码中
  • 您可以使用@Heschoon建议的脚本。(一个缺点是,如果这是在prod中,您可能已禁用内联脚本,因此无法在查询中直接执行此操作。相反,您需要添加脚本)

  • 你说的不同时间是什么意思。你说的是不同的格式???
    {
    "aggs": {
      "Group By Date": {
         "date_histogram": {
            "field": "dateCreated",
            "interval": "hour",
            "format" : "k"
            }
         }
      }
    }