Агрегирование по категориям текста
Данная функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих релизах. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
Агрегация по нескольким корзинам, группирующая полуструктурированный текст в корзины. Каждое поле text повторно анализируется с использованием пользовательского анализатора. Полученные токены затем категоризируются, создавая корзины с текстовыми значениями, имеющими похожий формат. Эта агрегация лучше всего работает с машиногенерированным текстом, таким как системные журналы. Для категоризации текста используются только первые 100 проанализированных токенов.
Если у вас выделено значительное количество памяти для JVM, но вы получаете исключения из-за пределов прерывания этой агрегации, возможно, вы пытаетесь категоризировать текст, который плохо отформатирован для категоризации. Подумайте о добавлении categorization_filters или запуске под Sampler или Diversified Sampler, чтобы изучить созданные категории.
Параметры
-
field - (Обязательно, строка) Поле полуструктурированного текста для категоризации.
-
max_unique_tokens - (Необязательно, целое число, по умолчанию:
50) Максимальное количество уникальных токенов в любой позиции доmax_matched_tokens. Должно быть больше 1. Меньшие значения используют меньше памяти и создают меньше категорий. Большие значения будут использовать больше памяти и создадут более узкие категории. Максимальное разрешенное значение равно100. -
max_matched_tokens - (Необязательно, целое число, по умолчанию:
5) Максимальное количество позиций токенов для совпадения, прежде чем пытаться объединить категории. Большие значения будут использовать больше памяти и создадут более узкие категории. Максимальное разрешенное значение равно100.
Пример: max_matched_tokens из 2 запретит объединение категорий [foo bar baz] [foo baz bozo], так как для совпадения категории требуется соответствие первых 2 токенов.
Когда достигается max_unique_tokens в заданной позиции, добавляется новый токен *, и все новые токены в этой позиции сопоставляются с этим * токеном.
-
similarity_threshold - (Необязательно, целое число, по умолчанию:
50) Минимальный процент токенов, которые должны совпадать для добавления текста в корзину категории. Должно быть между 1 и 100. Чем больше значение, тем уже категории. Большие значения увеличат использование памяти и создадут более узкие категории. -
categorization_filters - (Необязательно, массив строк) Это свойство ожидает массив регулярных выражений. Выражения используются для фильтрации совпадающих последовательностей из значений поля категоризации. Вы можете использовать эту функциональность для точной настройки категоризации, исключая последовательности из рассмотрения при определении категорий. Например, вы можете исключить SQL-запросы, которые появляются в ваших файлах журналов. Это свойство не может использоваться одновременно с
categorization_analyzer. Если вы хотите определить только простые фильтры регулярных выражений, которые применяются до токенизации, установка этого свойства является наиболее простым методом. Если вы также хотите настроить токенизатор или фильтрацию после токенизации, используйте свойствоcategorization_analyzerи включите фильтры в качестве фильтров символовpattern_replace. -
categorization_analyzer -
(Необязательно, объект или строка) Анализатор категоризации определяет, как текст анализируется и токенизируется перед категоризацией. Синтаксис очень похож на синтаксис, используемый для определения
analyzerв точке входа анализа. Это свойство не может использоваться одновременно сcategorization_filters.Поле
categorization_analyzerможет быть указано как строкой, так и объектом. Если это строка, она должна ссылаться на встроенный анализатор или анализатор, добавленный другим плагином. Если это объект, у него есть следующие свойства:Свойства
categorization_analyzer-
char_filter - (массив строк или объектов) Один или несколько фильтров символов. В дополнение к встроенным фильтрам символов, другие плагины могут предоставить больше фильтров символов. Это свойство необязательно. Если оно не указано, фильтры символов не применяются до категоризации. Если вы настраиваете какой-либо другой аспект анализатора и вам нужно достичь эквивалента
categorization_filters(которые недопустимы при настройке другого аспекта анализатора), добавьте их сюда как фильтры замены шаблона. -
tokenizer - (строка или объект) Название или определение токенизатора для использования после применения фильтров символов. Это свойство обязательно, если
categorization_analyzerуказано как объект. Машинное обучение предоставляет токенизатор под названиемml_standard, который токенизирует текст таким образом, который, как было установлено, обеспечивает хорошие результаты категоризации для различных форматов файлов журналов для журналов на английском языке. Если вы хотите использовать этот токенизатор, но изменить фильтры символов или токенов, укажите"tokenizer": "ml_standard"в вашемcategorization_analyzer. Кроме того, доступен токенизаторml_classic, который токенизирует так же, как и не настраиваемый токенизатор в старых версиях продукта (до 6.2).ml_classicбыл токенизатором по умолчанию для категоризации в версиях 6.2 до 7.13, поэтому, если вам нужна категоризация, идентичная значению по умолчанию для задач, созданных в этих версиях, укажите"tokenizer": "ml_classic"в вашемcategorization_analyzer. -
filter - (массив строк или объектов) Один или несколько фильтров токенов. В дополнение к встроенным фильтрам токенов, другие плагины могут предоставить больше фильтров токенов. Это свойство необязательно. Если оно не указано, фильтры токенов не применяются до категоризации.
-
-
shard_size - (Необязательно, целое число) Количество корзин категоризации, возвращаемых из каждого фрагмента перед объединением всех результатов.
-
size - (Необязательно, целое число, по умолчанию:
10) Количество корзин для возврата. -
min_doc_count - (Необязательно, целое число) Минимальное количество документов для возврата корзины в результаты.
-
shard_min_doc_count - (Необязательно, целое число) Минимальное количество документов для возврата корзины из фрагмента перед объединением.
Основное использование
Анализ больших наборов результатов займет много времени и памяти. Эта агрегация должна использоваться в сочетании с Асинхронным поиском. Кроме того, вы можете рассмотреть возможность использования агрегации как дочерней агрегации для Sampler или Diversified Sampler агрегации. Это обычно улучшает скорость и использование памяти.
Пример:
POST log-messages/_search?filter_path=aggregations
{
"aggs": {
"categories": {
"categorize_text": {
"field": "message"
}
}
}
} Ответ:
{
"aggregations" : {
"categories" : {
"buckets" : [
{
"doc_count" : 3,
"key" : "Node shutting down"
},
{
"doc_count" : 1,
"key" : "Node starting up"
},
{
"doc_count" : 1,
"key" : "User foo_325 logging on"
},
{
"doc_count" : 1,
"key" : "User foo_864 logged off"
}
]
}
}
} Вот пример с использованием categorization_filters
POST log-messages/_search?filter_path=aggregations
{
"aggs": {
"categories": {
"categorize_text": {
"field": "message",
"categorization_filters": ["\\w+\\_\\d{3}"]
}
}
}
} | Фильтры для применения к проанализированным токенам. Он фильтрует токены, такие как |
Обратите внимание, что токены foo_<number> не являются частью результатов категорий
{
"aggregations" : {
"categories" : {
"buckets" : [
{
"doc_count" : 3,
"key" : "Node shutting down"
},
{
"doc_count" : 1,
"key" : "Node starting up"
},
{
"doc_count" : 1,
"key" : "User logged off"
},
{
"doc_count" : 1,
"key" : "User logging on"
}
]
}
}
} Вот пример с использованием categorization_filters. Анализатор по умолчанию — это анализатор пробелов с пользовательским фильтром токенов, который фильтрует токены, начинающиеся с цифр. Но может оказаться, что токен является известным сильно варьирующимся токеном (форматированные имена пользователей, адреса электронной почты и т. д.). В этом случае полезно предоставить пользовательские categorization_filters для фильтрации этих токенов с целью улучшения категорий. Эти фильтры также уменьшат потребление памяти, поскольку в памяти хранится меньше токенов для категорий.
POST log-messages/_search?filter_path=aggregations
{
"aggs": {
"categories": {
"categorize_text": {
"field": "message",
"categorization_filters": ["\\w+\\_\\d{3}"],
"max_matched_tokens": 2,
"similarity_threshold": 30
}
}
}
} | Фильтры для применения к проанализированным токенам. Он фильтрует токены, такие как | |
| Требуется как минимум 2 токена, прежде чем категории журналов попытаются объединиться. | |
| Требуется 30% совпадающих токенов для расширения категорий журналов и добавления новой записи в журнал. |
Полученные категории теперь общие, сопоставляющие первый токен и объединяющие группы журналов.
{
"aggregations" : {
"categories" : {
"buckets" : [
{
"doc_count" : 4,
"key" : "Node *"
},
{
"doc_count" : 2,
"key" : "User *"
}
]
}
}
} Эта агрегация может иметь как дочерние агрегации, так и быть дочерней агрегацией. Это позволяет собирать верхние ежедневные категории и верхний образец документа, как показано ниже.
POST log-messages/_search?filter_path=aggregations
{
"aggs": {
"daily": {
"date_histogram": {
"field": "time",
"fixed_interval": "1d"
},
"aggs": {
"categories": {
"categorize_text": {
"field": "message",
"categorization_filters": ["\\w+\\_\\d{3}"]
},
"aggs": {
"hit": {
"top_hits": {
"size": 1,
"sort": ["time"],
"_source": "message"
}
}
}
}
}
}
}
} {
"aggregations" : {
"daily" : {
"buckets" : [
{
"key_as_string" : "2016-02-07T00:00:00.000Z",
"key" : 1454803200000,
"doc_count" : 3,
"categories" : {
"buckets" : [
{
"doc_count" : 2,
"key" : "Node shutting down",
"hit" : {
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "log-messages",
"_type" : "_doc",
"_id" : "1",
"_score" : null,
"_source" : {
"message" : "2016-02-07T00:00:00+0000 Node 3 shutting down"
},
"sort" : [
1454803260000
]
}
]
}
}
},
{
"doc_count" : 1,
"key" : "Node starting up",
"hit" : {
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "log-messages",
"_type" : "_doc",
"_id" : "2",
"_score" : null,
"_source" : {
"message" : "2016-02-07T00:00:00+0000 Node 5 starting up"
},
"sort" : [
1454803320000
]
}
]
}
}
}
]
}
},
{
"key_as_string" : "2016-02-08T00:00:00.000Z",
"key" : 1454889600000,
"doc_count" : 3,
"categories" : {
"buckets" : [
{
"doc_count" : 1,
"key" : "Node shutting down",
"hit" : {
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "log-messages",
"_type" : "_doc",
"_id" : "4",
"_score" : null,
"_source" : {
"message" : "2016-02-08T00:00:00+0000 Node 5 shutting down"
},
"sort" : [
1454889660000
]
}
]
}
}
},
{
"doc_count" : 1,
"key" : "User logged off",
"hit" : {
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "log-messages",
"_type" : "_doc",
"_id" : "6",
"_score" : null,
"_source" : {
"message" : "2016-02-08T00:00:00+0000 User foo_864 logged off"
},
"sort" : [
1454889840000
]
}
]
}
}
},
{
"doc_count" : 1,
"key" : "User logging on",
"hit" : {
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "log-messages",
"_type" : "_doc",
"_id" : "5",
"_score" : null,
"_source" : {
"message" : "2016-02-08T00:00:00+0000 User foo_325 logging on"
},
"sort" : [
1454889720000
]
}
]
}
}
}
]
}
}
]
}
}
}
© 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-categorize-text-aggregation.html