Агрегация string stats
Агрегация multi-value, которая вычисляет статистику по строковым значениям, извлечённым из агрегированных документов. Эти значения можно получить из определённых keyword полей.
Агрегация string stats возвращает следующие результаты:
-
count— количество непустых полей. -
min_length— длина самого короткого термина. -
max_length— длина самого длинного термина. -
avg_length— средняя длина, вычисленная по всем терминам. -
entropy— значение энтропии Шеннона, вычисленное по всем терминам, собранным агрегацией. Энтропия Шеннона количественно определяет количество информации, содержащейся в поле. Это очень полезная метрика для измерения широкого спектра свойств набора данных, таких как разнообразие, сходство, случайность и т. д.
Например:
POST /my-index-000001/_search?size=0
{
"aggs": {
"message_stats": { "string_stats": { "field": "message.keyword" } }
}
} Вышеупомянутая агрегация вычисляет статистику строк для поля message во всех документах. Тип агрегации — string_stats, а параметр field определяет поле документов, по которому будет вычисляться статистика. Вышеприведённая команда вернёт следующее:
{
...
"aggregations": {
"message_stats": {
"count": 5,
"min_length": 24,
"max_length": 30,
"avg_length": 28.8,
"entropy": 3.94617750050791
}
}
} Имя агрегации (message_stats выше) также служит ключом, по которому можно получить результат агрегации из возвращённого ответа.
Распределение символов
Вычисление значения энтропии Шеннона основано на вероятности появления каждого символа во всех терминах, собранных агрегацией. Чтобы просмотреть распределение вероятностей для всех символов, можно добавить параметр show_distribution (по умолчанию: false).
POST /my-index-000001/_search?size=0
{
"aggs": {
"message_stats": {
"string_stats": {
"field": "message.keyword",
"show_distribution": true
}
}
}
} | Установите параметр |
{
...
"aggregations": {
"message_stats": {
"count": 5,
"min_length": 24,
"max_length": 30,
"avg_length": 28.8,
"entropy": 3.94617750050791,
"distribution": {
" ": 0.1527777777777778,
"e": 0.14583333333333334,
"s": 0.09722222222222222,
"m": 0.08333333333333333,
"t": 0.0763888888888889,
"h": 0.0625,
"a": 0.041666666666666664,
"i": 0.041666666666666664,
"r": 0.041666666666666664,
"g": 0.034722222222222224,
"n": 0.034722222222222224,
"o": 0.034722222222222224,
"u": 0.034722222222222224,
"b": 0.027777777777777776,
"w": 0.027777777777777776,
"c": 0.013888888888888888,
"E": 0.006944444444444444,
"l": 0.006944444444444444,
"1": 0.006944444444444444,
"2": 0.006944444444444444,
"3": 0.006944444444444444,
"4": 0.006944444444444444,
"y": 0.006944444444444444
}
}
}
} Объект distribution отображает вероятность появления каждого символа во всех терминах. Символы отсортированы по убыванию вероятности.
Скрипт
Если вам нужно получить string_stats для чего-то более сложного, чем одно поле, выполните агрегацию по полю runtime.
POST /my-index-000001/_search
{
"size": 0,
"runtime_mappings": {
"message_and_context": {
"type": "keyword",
"script": """
emit(doc['message.keyword'].value + ' ' + doc['context.keyword'].value)
"""
}
},
"aggs": {
"message_stats": {
"string_stats": { "field": "message_and_context" }
}
}
} Пропущенные значения
Параметр missing определяет, как должны обрабатываться документы, у которых отсутствует значение. По умолчанию они игнорируются, но также возможно их обработка как имеющих значение.
POST /my-index-000001/_search?size=0
{
"aggs": {
"message_stats": {
"string_stats": {
"field": "message.keyword",
"missing": "[empty message]"
}
}
}
} | Документы без значения в поле |
© 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-metrics-string-stats-aggregation.html