Агрегация случайной выборки
Эта функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих версиях. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
Агрегация random_sampler — это агрегация одного бакета, которая случайным образом включает документы в результаты агрегирования. Выборка обеспечивает значительное ускорение за счёт потери точности.
Выборка выполняется путём предоставления случайной подвыборки всего набора документов в фрагменте. Если в запросе поиска указан фильтр, этот фильтр применяется к подвыборке. Соответственно, если фильтр является ограничительным, может соответствовать очень мало документов; поэтому статистика может быть не такой точной.
Эта агрегация не должна путаться с агрегацией выборки. Агрегация выборки не выполняется по всем документам; вместо этого она выбирает первые n документы, соответствующие запросу.
resp = client.search(
index="kibana_sample_data_ecommerce",
size="0",
track_total_hits=False,
aggregations={
"sampling": {
"random_sampler": {
"probability": 0.1
},
"aggs": {
"price_percentiles": {
"percentiles": {
"field": "taxful_total_price"
}
}
}
}
},
)
print(resp) response = client.search(
index: 'kibana_sample_data_ecommerce',
size: 0,
track_total_hits: false,
body: {
aggregations: {
sampling: {
random_sampler: {
probability: 0.1
},
aggregations: {
price_percentiles: {
percentiles: {
field: 'taxful_total_price'
}
}
}
}
}
}
)
puts response const response = await client.search({
index: "kibana_sample_data_ecommerce",
size: 0,
track_total_hits: "false",
aggregations: {
sampling: {
random_sampler: {
probability: 0.1,
},
aggs: {
price_percentiles: {
percentiles: {
field: "taxful_total_price",
},
},
},
},
},
});
console.log(response); GET kibana_sample_data_ecommerce/_search?size=0&track_total_hits=false
{
"aggregations": {
"sampling": {
"random_sampler": {
"probability": 0.1
},
"aggs": {
"price_percentiles": {
"percentiles": {
"field": "taxful_total_price"
}
}
}
}
}
} Параметры верхнего уровня для random_sampler
-
probability - (Обязательно, число с плавающей точкой) Вероятность того, что документ будет включён в агрегированные данные. Должно быть больше 0, меньше
0.5или ровно1. Чем ниже вероятность, тем меньше документов соответствует. -
seed - (Необязательно, целое число) Зерно для генерации случайной выборки документов. При указании зерна случайная подвыборка документов одинакова при каждом вызове.
Как работает выборка?
Агрегация является случайной выборкой всех документов в индексе. Другими словами, выборка выполняется по всему исходному набору документов. Если предоставлен запрос, документ возвращается, если он соответствует запросу и если документ находится в случайной выборке. Выборка не выполняется по соответствующим документам.
Рассмотрим набор документов [1, 2, 3, 4, 5]. Ваш запрос соответствует [1, 3, 5], а случайно выбранный набор — [2, 4, 5]. В этом случае возвращаемым документом будет [5].
Этот тип выборки обеспечивает почти линейное улучшение задержки запроса по отношению к величине, на которую выборка уменьшает размер набора документов:
Эта диаграмма типична для большинства агрегаций для набора тестовых данных объёмом 63 миллиона документов. Точные константы будут зависеть от размера набора данных и количества фрагментов, но форма взаимосвязи между ускорением и вероятностью широко соблюдается. Для некоторых агрегаций ускорение может быть не таким значительным. Эти агрегации имеют некоторый постоянный накладные расходы, не связанные с количеством просмотренных документов. Даже для этих агрегаций ускорения могут быть существенными.
Выборка генерируется путём пропуска документов с помощью геометрического распределения ((1-p)^(k-1)*p), где вероятность успеха — указанное значение probability (p в уравнении распределения). Значения, возвращаемые из распределения, указывают, сколько документов пропустить в исходном наборе. Это эквивалентно выбору документов случайным образом. Следовательно, ожидаемое число неудач до успеха — (1-p)/p. Например, при значении "probability": 0.01 ожидаемое число неудач (или среднее число пропущенных документов) составит 99 с дисперсией 9900. Соответственно, если в вашем индексе или по результатам фильтрации было всего 80 документов, вы, скорее всего, не получите никаких результатов.
На приведенной картинке p — это вероятность, предоставленная агрегации, а n — количество документов, соответствующих запросу. Вы можете увидеть влияние выбросов на sum и mean, но когда при более высоких скоростях выборки всё ещё соответствует много документов, относительная ошибка остаётся низкой.
Это результат агрегаций на типичном положительно скошенном наборе данных APM, который также имеет выбросы в правом хвосте. Линейная зависимость относительной ошибки от размера выборки, как правило, сохраняется, но наклон зависит от вариации агрегируемой величины. Таким образом, разброс в ваших данных может привести к увеличению или уменьшению скоростей относительной ошибки.
Согласованность случайной выборки
Для заданного probability и seed агрегация случайной выборки согласована при выборке неизменных данных из одного и того же фрагмента. Однако это случайная выборка фонового набора, включён ли конкретный документ в выборку или нет, зависит от текущего количества сегментов.
Это означает, что реплики и основные фрагменты могут возвращать разные значения, поскольку разные конкретные документы выбираются.
Если фрагмент изменяется путём добавления, обновления, удаления документов или слияния сегментов, конкретные выбранные документы могут изменяться, а следовательно, могут изменяться результирующие статистические данные.
Результирующие статистические данные, используемые из агрегации случайной выборки, являются приблизительными и должны рассматриваться как таковые.
Случайные выборки - особые случаи
Все значения, возвращаемые агрегацией случайной выборки, масштабируются для облегчения визуализации и вычислений. Например, при случайной выборке агрегации гистограмм дат каждое значение doc_count для каждого бакета масштабируется с помощью обратного значения случайной выборки probability. Итак, если doc_count для бакета составляет 10,000 при probability: 0.1, фактическое количество агрегированных документов — 1,000.
Исключением из этого является агрегация Cardinality. Количество уникальных элементов не подходит для автоматического масштабирования. При интерпретации количества уникальных элементов сравнивайте его с количеством выбранных документов, предоставленных в верхнем уровне doc_count в рамках агрегации случайной выборки. Это даёт представление об уникальных значениях как процентном отношении от общего числа значений. Однако это может не отражать точное количество уникальных значений для данного поля.
© 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/8.17/search-aggregations-random-sampler-aggregation.html