Создание пользовательского анализатора
Когда встроенные анализаторы не удовлетворяют вашим потребностям, вы можете создать пользовательский анализатор, который использует соответствующую комбинацию:
- нулевые или более фильтров символов
- токеннизатор
- нулевые или более фильтров токенов.
Настройка
Пользовательский анализатор принимает следующие параметры:
| | Тип анализатора. Принимает типы встроенных анализаторов. Для пользовательских анализаторов используйте |
| | Встроенный или настраиваемый токеннизатор. (Обязательно) |
| | Необязательный массив встроенных или настраиваемых фильтров символов. |
| | Необязательный массив встроенных или настраиваемых фильтров токенов. |
| | При индексировании массива текстовых значений Elasticsearch вставляет фальшивый «зазор» между последним термином одного значения и первым термином следующего значения, чтобы убедиться, что запрос по фразе не соответствует двум терминам из разных элементов массива. По умолчанию равно |
Пример настройки
Вот пример, который объединяет следующее:
- Фильтр символов
- Токенизатор
- Фильтры токенов
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_custom_analyzer",
"text": "Is this <b>déjà vu</b>?"
} | Для |
Приведенный выше пример создает следующие термины:
[ is, this, deja, vu ]
В предыдущем примере использовались токенизатор, фильтры токенов и фильтры символов с их значениями по умолчанию, но можно создать настроенные версии каждого из них и использовать их в пользовательском анализаторе.
Вот более сложный пример, который объединяет следующее:
- Фильтр символов
-
- Фильтр символов Mapping, настроенный для замены
:)на_happy_и:(на_sad_
- Фильтр символов Mapping, настроенный для замены
- Токенизатор
-
- Токенизатор Pattern, настроенный для разделения по знакам препинания
- Фильтры токенов
-
- Фильтр токенов Lowercase
- Фильтр токенов Stop, настроенный для использования предварительно определенного списка стоп-слов английского языка
Вот пример:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"char_filter": [
"emoticons"
],
"tokenizer": "punctuation",
"filter": [
"lowercase",
"english_stop"
]
}
},
"tokenizer": {
"punctuation": {
"type": "pattern",
"pattern": "[ .,!?]"
}
},
"char_filter": {
"emoticons": {
"type": "mapping",
"mappings": [
":) => _happy_",
":( => _sad_"
]
}
},
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_custom_analyzer",
"text": "I'm a :) person, and you?"
} | Назначает индексу пользовательский анализатор по умолчанию, | |
| Определяет пользовательский токенизатор | |
| Определяет пользовательский фильтр символов | |
| Определяет пользовательский фильтр токенов |
Приведенный выше пример создает следующие термины:
[ i'm, _happy_, person, you ]
© 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-custom-analyzer.html