i'm receiving requests/events from a large number of client applications. i'd like to use elasticsearch to find out when my highest traffic point is.
one thing i've tried is a filter aggregation with a nested histogram and then a nested "terms" aggregation that gets the distinct hour of the day via a script field. the following is my attempt, and it performs terribly (as I'd expect since I'm executing a script per document).
{
"aggs": {
"sites_within_range": {
"filter" : {
"range" : {
"occurred" : {
"gt" : "now-1M"
}
}
},
"aggs": {
"sites_over_time": {
"date_histogram": {
"field": "occurred",
"interval": "week"
},
"aggs":{
"site_names": {
"terms": {
"script": "doc['occurred'].date.getHourOfDay()",
"size": 10000
}
}
}
}
}
}
}
}
I've also considered storing the date elements i want to query as distinct parts of the document, eg:
{
"date": "actual datetime",
"day": "monday",
"hour": 8
"minute": 37
}
this also smells like the wrong answer to me.
<edit> after some investigation, looks like I might be interested in the new cardinality / percents aggregations coming in 1.1?