我根据字段acctstarttime在ES中进行了以下查询,以返回具有更多访问次数的HOURS。
但是,由于我有超过一天的相同小时数,因此会返回相同的小时数2倍,这是您的COUNT时预期的1小时结果。
查询:
{
"size" : 0,
"query" : {
"filtered" : {
"query": {
"match": { "client_id" : 1 }
},
"filter" : {
"bool" : {
"must" : [
{
"range" : {
"acctstarttime" : {
"gte" : "2016-05-01 00:00:00",
"lte" : "2016-06-02 23:59:59"
}
}
}
]
}
}
}
},
"aggs" : {
"visits_per_hour" : {
"date_histogram" : {
"field" : "acctstarttime",
"interval" : "hour",
"format" : "HH"
}
}
}
}
结果:
"aggregations": {
"visits_per_hour": {
"buckets": [
{
"key_as_string": "17",
"key": 1463763600000,
"doc_count": 6
},
{
"key_as_string": "18",
"key": 1463767200000,
"doc_count": 3
},
{
"key_as_string": "22",
"key": 1464127200000,
"doc_count": 1
},
{
"key_as_string": "22",
"key": 1464300000000,
"doc_count": 2
},
{
"key_as_string": "22",
"key": 1464559200000,
"doc_count": 1
}
]
}
}
预期:
"aggregations": {
"visits_per_hour": {
"buckets": [
{
"key_as_string": "17",
"key": 1463763600000,
"doc_count": 6
},
{
"key_as_string": "18",
"key": 1463767200000,
"doc_count": 3
},
{
"key_as_string": "22",
"key": 1464127200000,
"doc_count": 4
}
]
}
}
最佳答案
您有两种解决方案
hour
,并在该字段上聚合script
,它将提取小时并对其进行汇总(注意:您需要enable dynamic scripting)第一个解决方案是首选的解决方案,因为它将具有更高的性能。
第二种解决方案如下所示:
{
"size": 0,
"aggs": {
"visits_per_hour": {
"histogram": {
"script": "doc.acctstarttime.date.getHourOfDay()",
"interval": 1,
"order": {
"_key": "desc"
}
}
}
}
}
关于elasticsearch - 按小时返回的Elasticsearch聚合返回重复的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37599303/