gpt4 book ai didi

elasticsearch - 按小时返回的Elasticsearch聚合返回重复的小时数

转载 作者:行者123 更新时间:2023-12-03 01:54:34 25 4
gpt4 key购买 nike

我根据字段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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com