Агрегация кумулятивной кратности
Родительская агрегация на основе конвейера, которая рассчитывает кумулятивную кратность в родительской агрегации гистограммы (или агрегации по дате и времени). Указанный метрический показатель должен быть агрегацией кратности, а охватывающая гистограмма должна иметь min_doc_count, установленное в 0 (значение по умолчанию для агрегаций histogram).
Агрегация cumulative_cardinality полезна для поиска «общего количества новых элементов», например, количества новых посетителей вашего веб-сайта каждый день. Регулярная агрегация кратности покажет вам, сколько уникальных посетителей приходило каждый день, но не различает «новых» и «повторных» посетителей. Агрегация кумулятивной кратности может использоваться для определения того, сколько уникальных посетителей каждого дня являются «новыми».
Синтаксис
Агрегация cumulative_cardinality в изоляции выглядит так:
{
"cumulative_cardinality": {
"buckets_path": "my_cardinality_agg"
}
} Таблица 52. Параметры 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
}
}
]
}
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-pipeline-cumulative-cardinality-aggregation.html