Токенайзер n-грамм
Токенайзер ngram сначала разбивает текст на слова всякий раз, когда встречает один из заданных символов, а затем генерирует n-граммы заданной длины для каждого слова.
N-граммы похожи на скользящее окно, которое перемещается по слову — это непрерывная последовательность символов заданной длины. Они полезны для запросов к языкам, в которых не используются пробелы или которые имеют длинные составные слова, например, немецкий.
Пример выходных данных
При стандартных настройках токенайзер ngram обрабатывает исходный текст как один токен и генерирует n-граммы с минимальной длиной 1 и максимальной длиной 2:
POST _analyze
{
"tokenizer": "ngram",
"text": "Quick Fox"
} Для приведенного выше предложения будут сгенерированы следующие термины:
[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
Настройка
Токенайзер ngram принимает следующие параметры:
| | Минимальная длина символов в грамме. По умолчанию |
| | Максимальная длина символов в грамме. По умолчанию |
| | Классы символов, которые должны быть включены в токен. Elasticsearch будет разбивать на символы, которые не принадлежат указанным классам. По умолчанию Классы символов могут быть любыми из следующих:
|
| | Пользовательские символы, которые должны обрабатываться как часть токена. Например, установка этого значения на |
Обычно имеет смысл установить min_gram и max_gram в одинаковое значение. Чем меньше длина, тем больше документов будут соответствовать, но тем ниже качество соответствий. Чем больше длина, тем более специфичными будут соответствия. Триграмма (длина 3) — хорошее место для начала.
Настройка уровня индекса index.max_ngram_diff контролирует максимальное допустимое различие между max_gram и min_gram.
Пример настройки
В этом примере мы настраиваем токенайзер ngram для обработки букв и цифр как токенов и для генерации триграмм (граммы длины 3):
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
} Приведенный выше пример генерирует следующие термины:
[ Qui, uic, ick, Fox, oxe, xes ]
© 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-ngram-tokenizer.html