Агрегация матрицы смежности
Агрегация по корзинам, возвращающая форму матрицы смежности. Запрос предоставляет набор именованных выражений фильтра, аналогичных запросу агрегации filters. Каждая корзина в ответе представляет собой непустую ячейку в матрице пересекающихся фильтров.
С учетом фильтров с именами A, B и C ответ вернёт корзины со следующими именами:
| A | B | C | |
|---|---|---|---|
A | A | A&B | A&C |
B | B | B&C | |
C | C |
Пересекающиеся корзины, например A&C, маркируются с помощью комбинации имён двух фильтров с разделителем по умолчанию &. Обратите внимание, что ответ не включает корзину C&A, так как это был бы тот же набор документов, что и в A&C. Матрица является симметричной, поэтому мы возвращаем только половину из неё. Для этого мы сортируем строки имён фильтров и всегда используем наименьшее из пары в качестве значения слева от разделителя.
Пример
Следующая агрегация interactions использует adjacency_matrix для определения групп людей, которые обменивались электронными письмами.
PUT emails/_bulk?refresh
{ "index" : { "_id" : 1 } }
{ "accounts" : ["hillary", "sidney"]}
{ "index" : { "_id" : 2 } }
{ "accounts" : ["hillary", "donald"]}
{ "index" : { "_id" : 3 } }
{ "accounts" : ["vladimir", "donald"]}
GET emails/_search
{
"size": 0,
"aggs" : {
"interactions" : {
"adjacency_matrix" : {
"filters" : {
"grpA" : { "terms" : { "accounts" : ["hillary", "sidney"] }},
"grpB" : { "terms" : { "accounts" : ["donald", "mitt"] }},
"grpC" : { "terms" : { "accounts" : ["vladimir", "nigel"] }}
}
}
}
}
} Ответ содержит корзины с подсчётом документов для каждого фильтра и комбинации фильтров. Корзины без соответствующих документов исключаются из ответа.
{
"took": 9,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"interactions": {
"buckets": [
{
"key":"grpA",
"doc_count": 2
},
{
"key":"grpA&grpB",
"doc_count": 1
},
{
"key":"grpB",
"doc_count": 2
},
{
"key":"grpB&grpC",
"doc_count": 1
},
{
"key":"grpC",
"doc_count": 1
}
]
}
}
} Параметры
-
filters -
(Обязательный, объект) Фильтры, используемые для создания корзин.
Свойства
filters-
<filter> -
(Обязательный, объект Query DSL) Запрос, используемый для фильтрации документов. Ключом является имя фильтра.
Требуется как минимум один фильтр. Общее число фильтров не должно превышать значение настройки
indices.query.bool.max_clause_count. См. Пределы фильтров.
-
-
separator - (Необязательный, строка) Разделитель, используемый для конкатенации имён фильтров. По умолчанию
&.
Тело ответа
-
key - (строка) Фильтры для корзины. Если корзина использует несколько фильтров, имена фильтров конкатенируются с помощью
separator. -
document_count - (целое число) Количество документов, соответствующих фильтрам корзины.
Использование
В отдельности эта агрегация может предоставить все данные, необходимые для создания неориентированного взвешенного графа. Однако при использовании с дочерними агрегациями, такими как date_histogram, результаты могут предоставить дополнительные уровни данных, необходимые для выполнения динамического анализа сети, где изучение взаимодействий с течением времени становится важным.
Пределы фильтров
Для N фильтров матрица генерируемых корзин может составлять N²/2, поэтому по умолчанию накладывается максимальное ограничение в 100 фильтров. Это значение может быть изменено с помощью настройки уровня индекса index.max_adjacency_matrix_filters (примечание: эта настройка устарела и будет заменена на indices.query.bool.max_clause_count в 8.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-bucket-adjacency-matrix-aggregation.html