原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-pipeline-cumulative-cardinality-aggregation.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/search-aggregations-pipeline-cumulative-cardinality-aggregation.html
本地英文版地址: ../en/search-aggregations-pipeline-cumulative-cardinality-aggregation.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
一种父管道聚合,用于计算父直方图(或日期直方图date_histogram)聚合中的累积基数。
指定的度量必须是一个基数聚合,并且封闭直方图必须将min_doc_count设置为0(histogram聚合的默认值)。
cumulative_cardinality聚合对于查找“总的新项目”非常有用,比如每天访问你的网站的新访客的数量。
常规的基数聚合会告诉你每天有多少独立访问者,但不会区分“新”或“重复”的访问者。
累积基数聚合可用于确定每天有多少独立访问者是“新的”。
一个单独的cumulative_cardinality看起来像这样:
{
"cumulative_cardinality": {
"buckets_path": "my_cardinality_agg"
}
}
表 14. cumulative_cardinality参数
| 参数名称 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
|
我们希望找到其累积基数的基数聚合的路径(更多详情请参考 |
必须 |
|
|
应用于此聚合的输出值的格式 |
可选 |
|
下面这个代码片段计算了每日用户(users)总数的累积基数:
GET /user_hits/_search
{
"size": 0,
"aggs" : {
"users_per_day" : {
"date_histogram" : {
"field" : "timestamp",
"calendar_interval" : "day"
},
"aggs": {
"distinct_users": {
"cardinality": {
"field": "user_id"
}
},
"total_new_users": {
"cumulative_cardinality": {
"buckets_path": "distinct_users"
}
}
}
}
}
}
响应可能像下面这样:
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"users_per_day": {
"buckets": [
{
"key_as_string": "2019-01-01T00:00:00.000Z",
"key": 1546300800000,
"doc_count": 2,
"distinct_users": {
"value": 2
},
"total_new_users": {
"value": 2
}
},
{
"key_as_string": "2019-01-02T00:00:00.000Z",
"key": 1546387200000,
"doc_count": 2,
"distinct_users": {
"value": 2
},
"total_new_users": {
"value": 3
}
},
{
"key_as_string": "2019-01-03T00:00:00.000Z",
"key": 1546473600000,
"doc_count": 3,
"distinct_users": {
"value": 3
},
"total_new_users": {
"value": 4
}
}
]
}
}
}
请注意第二天,2019-01-02,有两个不同的用户,但由累积管道聚合生成的total_new_users度量仅增加到三个。
这意味着那天的两个用户中只有一个是新的,另一个在前一天已经出现过了。
这种情况在第三天再次发生,三个用户中只有一个是全新的。
cumulative_cardinality聚合将向你展示自被查询的时间段开始以来的总的非重复计数。
然而,有时查看“增量”计数是有用的。
也就是说,每天有多少新用户加入,而不是累计的总数。
这可以通过在查询中添加一个derivative聚合来实现:
GET /user_hits/_search
{
"size": 0,
"aggs" : {
"users_per_day" : {
"date_histogram" : {
"field" : "timestamp",
"calendar_interval" : "day"
},
"aggs": {
"distinct_users": {
"cardinality": {
"field": "user_id"
}
},
"total_new_users": {
"cumulative_cardinality": {
"buckets_path": "distinct_users"
}
},
"incremental_new_users": {
"derivative": {
"buckets_path": "total_new_users"
}
}
}
}
}
}
响应可能像下面这样:
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"users_per_day": {
"buckets": [
{
"key_as_string": "2019-01-01T00:00:00.000Z",
"key": 1546300800000,
"doc_count": 2,
"distinct_users": {
"value": 2
},
"total_new_users": {
"value": 2
}
},
{
"key_as_string": "2019-01-02T00:00:00.000Z",
"key": 1546387200000,
"doc_count": 2,
"distinct_users": {
"value": 2
},
"total_new_users": {
"value": 3
},
"incremental_new_users": {
"value": 1.0
}
},
{
"key_as_string": "2019-01-03T00:00:00.000Z",
"key": 1546473600000,
"doc_count": 3,
"distinct_users": {
"value": 3
},
"total_new_users": {
"value": 4
},
"incremental_new_users": {
"value": 1.0
}
}
]
}
}
}