我需要按周和小时分组获取一些数据,例如
curl -XGET http://localhost:9200/testing/hello/_search?pretty=true -d '
{
"size": 0,
"aggs": {
"articles_over_time" : {
"date_histogram" : {
"field" : "date",
"interval" : "hour",
"format": "E - k"
}
}
}
}
'
给我这个:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 2857,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"articles_over_time" : {
"buckets" : [ {
"key_as_string" : "Fri - 17",
"key" : 1391792400000,
"doc_count" : 6
},
...
{
"key_as_string" : "Wed - 22",
"key" : 1411596000000,
"doc_count" : 1
}, {
"key_as_string" : "Wed - 22",
"key" : 1411632000000,
"doc_count" : 1
} ]
}
}
}
现在我需要通过这个值总结文档计数"周三 - 22",我该怎么做? 也许是另一种方法?
答案 0 :(得分:1)
this thread已经解决了同样的问题。
根据您的问题调整解决方案,我们需要制作一个脚本,将日期转换为一天中的小时和一周中的某一天:
Date date = new Date(doc['date'].value) ;
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('EEE, HH');
format.format(date)
并在查询中使用它:
{
"aggs": {
"perWeekDay": {
"terms": {
"script": "Date date = new Date(doc['date'].value) ;java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('EEE, HH');format.format(date)"
}
}
}
}
答案 1 :(得分:0)
您可以尝试使用子聚合从聚合结果中对“key_as_string”字段进行术语聚合。
希望有所帮助。
答案 2 :(得分:0)
这是因为您使用的是“小时”的间隔,但是,日期格式为“天”(E - k)。
将您的间隔更改为“天”,并且您将不再为“Weds - 22”获得单独的存储分区。
或者,如果您确实需要每小时,则更改格式以包含小时字段。