我对汇总有疑问。我读到了Date Histogram Aggregation。但是它仅按日期对文档进行排序。因此,我有访问索引,其中有日期和 visited_page 字段。我想汇总例如每小时的计数(例如,用户每小时的访问页面数)。应该使用上面的聚合还是我应该以其他方式聚合?
答案 0 :(得分:1)
该查询应该如下所示:
GET {index_name}/{type}/_search
{
"size": 0, // no need to display search result, can boost query speed
"aggs": {
"unique_visited_page": {
"terms": {
"field": "visited_page" // this must be indexed with keyword type
},
"aggs": {
"visit_page_per_hour" : {
"date_histogram" : {
"field" : "date_field",
"interval" : "hour"
}
}
}
}
}
}
我们先按 visited_page 进行汇总,然后针对每个 visited_page 每小时进行细化以获取计数。
使用我的示例数据的示例响应
{
...
"hits": {
"total": 4,
"max_score": 0,
"hits": []
},
"aggregations": {
"unique_visited_page": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "contact.html",
"doc_count": 2,
"visit_page_per_hour": {
"buckets": [
{
"key_as_string": "2018-07-24T14:00:00.000Z",
"key": 1532440800000,
"doc_count": 1
},
{
"key_as_string": "2018-07-24T15:00:00.000Z",
"key": 1532444400000,
"doc_count": 1
}
]
}
},
{
"key": "index.html",
"doc_count": 1,
"visit_page_per_hour": {
"buckets": [
{
"key_as_string": "2018-07-24T13:00:00.000Z",
"key": 1532437200000,
"doc_count": 1
}
]
}
},
{
"key": "page.html",
"doc_count": 1,
"visit_page_per_hour": {
"buckets": [
{
"key_as_string": "2018-07-24T13:00:00.000Z",
"key": 1532437200000,
"doc_count": 1
}
]
}
}
]
}
}
}
结果的关键是我们的 visited_page 值,然后每小时进行汇总并返回 doc_count 。 doc_count 也许是您想要的值。
希望有帮助。
答案 1 :(得分:0)
您似乎需要多存储桶聚合。 我发现this
您对此感兴趣:
GET /_search
{
"aggs" : {
"my_buckets": {
"composite" : {
"sources" : [
{ "date": { "date_histogram": { "field": "timestamp", "interval": "1d" } } },
{ "product": { "terms": {"field": "product" } } }
]
}
}
}
}
这将从两个值源(date_histogram和一个术语)创建的值中创建复合存储桶。每个存储区由两个值组成,其中一个用于聚合中定义的每个值源。允许任何类型的组合,并且数组中的顺序保留在复合存储桶中。
有帮助吗?