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