我的文档在不同时间编入索引。现在我需要按照每小时的时间对这些文档进行分组。聚合后的桶应该显示从00到23的范围。在elasticsearch中这种排序是否可行?
答案 0 :(得分:3)
使用date_histogram
并将format
设为"k"
{
"aggs": {
"Group By Date": {
"date_histogram": {
"field": "dateCreated",
"interval": "hour",
"format" : "k"
}
}
}
}
答案 1 :(得分:0)
如果您希望按小时对文档进行分组,而不考虑年份,日期,毫秒,则可能需要使用以下聚合:
{
"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个桶,每个桶对应一个小时。如this answer中所述,这也适用于星期几的统计数据。
如果您希望每天都有小时数,请使用 date_histogram 解决方案:
{
"aggs": {
"Group By Date": {
"date_histogram": {
"field": "dateCreated",
"interval": "hour",
"format" : "k"
}
}
}
}
答案 2 :(得分:0)
可能迟到了派对,但使用Elasticsearch不能直接进行这种聚合。但有几种解决方法: