Токенизатор Pattern
Токенизатор pattern использует регулярное выражение для разделения текста на термины всякий раз, когда оно соответствует разделителю слов, или для захвата соответствующего текста в качестве терминов.
По умолчанию используется шаблон \W+, который разделяет текст всякий раз, когда встречаются небуквенно-цифровые символы.
Осторожно: патологические регулярные выражения
Токенизатор шаблонов использует Регулярные выражения Java.
Неправильно составленное регулярное выражение может работать очень медленно или даже сгенерировать ошибку StackOverflowError и привести к внезапному выходу из строя узла, на котором оно выполняется.
Узнайте больше о патологических регулярных выражениях и способах их предотвращения.
Пример вывода
POST _analyze
{
"tokenizer": "pattern",
"text": "The foo_bar_size's default is 5."
} Предложение выше даст следующие термины:
[ The, foo_bar_size, s, default, is, 5 ]
Настройка
Токенизатор pattern принимает следующие параметры:
| | Регулярное выражение Java, по умолчанию |
| | Флаги регулярного выражения Java флаги. Флаги должны быть разделены символом «|», например |
| | Группа захвата, которую нужно извлечь как токены. По умолчанию |
Пример конфигурации
В этом примере мы настраиваем токенизатор pattern для разбиения текста на токены при встрече запятых:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": ","
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_analyzer",
"text": "comma,separated,values"
} Вышеприведенный пример генерирует следующие термины:
[ comma, separated, values ]
В следующем примере мы настраиваем токенизатор pattern для захвата значений, заключенных в двойные кавычки (игнорируя вложенные экранированные кавычки \"). Само регулярное выражение выглядит так:
"((?:\\"|[^"]|\\")*)"
И читается следующим образом:
- Литеральный
" -
Начинаем захват:
- Литеральный
\"или любой символ, кроме" - Повторять, пока не найдутся больше совпадающих символов
- Литеральный
- Литеральная закрывающая
"
Когда шаблон задан в формате JSON, символы " и \ необходимо экранировать, так что шаблон будет выглядеть следующим образом:
\"((?:\\\\\"|[^\"]|\\\\\")+)\"
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": "\"((?:\\\\\"|[^\"]|\\\\\")+)\"",
"group": 1
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_analyzer",
"text": "\"value\", \"value with embedded \\\" quote\""
} Вышеприведенный пример генерирует следующие два термина:
[ value, value with embedded \" quote ]
© 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/analysis-pattern-tokenizer.html