The same kind of problem has been solved in this thread.
Adapting the solution to your problem, we need to make a script to convert the date into the hour of day:
Date date = new Date(doc['created_at'].value) ;
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('HH');
format.format(date)
And use it in a query:
{
"aggs": {
"perWeekDay": {
"filter" : {
"range" : {
"occurred" : {
"gt" : "now-1M"
}
}
},
"aggs": {
"terms": {
"script": "Date date = new Date(doc['created_at'].value) ;java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('HH');format.format(date)"
}
}
}
}
And you have the traffic by hour of day.
Nota bene: Storing the hours/days/minutes in your document is the most efficient way of doing that kind of aggregation. My answer assumes you don't want to store that information. Scripts usually aren't über efficent.