原英文版地址: 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 } } ] } } }