Анализатор Pattern
Анализатор pattern использует регулярное выражение для разделения текста на термины. Регулярное выражение должно соответствовать разделителям токенов, а не самим токенам. Регулярное выражение по умолчанию равно \W+ (или все символы, не являющиеся словами).
Осторожно с патологическими регулярными выражениями
Анализатор pattern использует регулярные выражения Java.
Плохо написанное регулярное выражение может работать очень медленно или даже выбросить ошибку StackOverflowError, что приведёт к внезапному выходу узла, на котором оно выполняется.
Подробнее о патологических регулярных выражениях и способах их предотвращения.
Пример вывода
POST _analyze
{
"analyzer": "pattern",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
} Вышеприведенное предложение даст следующие термины:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
Настройка
Анализатор pattern принимает следующие параметры:
| | Регулярное выражение Java, по умолчанию равно |
| | Флаги регулярного выражения Java. Флаги должны быть разделены символом «|», например, |
| | Необходимо ли преобразовывать термины в нижний регистр. По умолчанию равно |
| | Список стоп-слов, такой как |
| | Путь к файлу, содержащему стоп-слова. |
См. Фильтр токенов Stop для получения дополнительной информации о настройке стоп-слов.
Пример конфигурации
В этом примере мы настраиваем анализатор pattern для разделения адресов электронной почты на символы, не являющиеся словами, или на символы подчеркивания (\W|_), и для приведения результата к нижнему регистру:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_email_analyzer": {
"type": "pattern",
"pattern": "\\W|_",
"lowercase": true
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_email_analyzer",
"text": "John_Smith@foo-bar.com"
} | Обратные слэши в шаблоне необходимо экранировать при указании шаблона в виде строки JSON. |
Вышеуказанный пример создаёт следующие термины:
[ john, smith, foo, bar, com ]
Токенизатор CamelCase
Следующий более сложный пример разделяет текст CamelCase на токены:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"camel": {
"type": "pattern",
"pattern": "([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)|(?<=[\\p{L}&&[^\\p{Lu}]])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}[\\p{L}&&[^\\p{Lu}]])"
}
}
}
}
}
GET my-index-000001/_analyze
{
"analyzer": "camel",
"text": "MooseX::FTPClass2_beta"
} Вышеуказанный пример создаёт следующие термины:
[ moose, x, ftp, class, 2, beta ]
Вышеприведенное регулярное выражение проще понять как:
([^\p{L}\d]+) # swallow non letters and numbers,
| (?<=\D)(?=\d) # or non-number followed by number,
| (?<=\d)(?=\D) # or number followed by non-number,
| (?<=[ \p{L} && [^\p{Lu}]]) # or lower case
(?=\p{Lu}) # followed by upper case,
| (?<=\p{Lu}) # or upper case
(?=\p{Lu} # followed by upper case
[\p{L}&&[^\p{Lu}]] # then lower case
) Определение
Анализатор pattern состоит из:
- Токенизатор
- Фильтры токенов
-
- Фильтр токенов Lower Case
- Фильтр токенов Stop (по умолчанию отключен)
Если вам нужно настроить анализатор pattern сверх параметров конфигурации, вам нужно пересоздать его как анализатор custom и изменить его, обычно добавив фильтры токенов. Это позволит пересоздать встроенный анализатор pattern, и вы можете использовать его в качестве отправной точки для дальнейшей настройки:
PUT /pattern_example
{
"settings": {
"analysis": {
"tokenizer": {
"split_on_non_word": {
"type": "pattern",
"pattern": "\\W+"
}
},
"analyzer": {
"rebuilt_pattern": {
"tokenizer": "split_on_non_word",
"filter": [
"lowercase"
]
}
}
}
}
} | Шаблон по умолчанию — | |
| Вы можете добавить другие фильтры токенов после |
© 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-analyzer.html