Токенизатор n-грамм
Токенизатор ngram сначала разбивает текст на слова при обнаружении одного из указанного списка символов, а затем генерирует n-граммы заданной длины для каждого слова.
N-граммы — это как скользящее окно, которое перемещается по слову — непрерывная последовательность символов заданной длины. Они полезны для запросов к языкам, в которых нет пробелов или есть длинные сложные слова, например, немецкий.
Пример вывода
При стандартных настройках токенизатор ngram обрабатывает исходный текст как один токен и генерирует n-граммы с минимальной длиной 1 и максимальной длиной 2:
resp = client.indices.analyze(
tokenizer="ngram",
text="Quick Fox",
)
print(resp) response = client.indices.analyze(
body: {
tokenizer: 'ngram',
text: 'Quick Fox'
}
)
puts response const response = await client.indices.analyze({
tokenizer: "ngram",
text: "Quick Fox",
});
console.log(response); 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):
resp = client.indices.create(
index="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"
]
}
}
}
},
)
print(resp)
resp1 = client.indices.analyze(
index="my-index-000001",
analyzer="my_analyzer",
text="2 Quick Foxes.",
)
print(resp1) response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: 'my_tokenizer'
}
},
tokenizer: {
my_tokenizer: {
type: 'ngram',
min_gram: 3,
max_gram: 3,
token_chars: [
'letter',
'digit'
]
}
}
}
}
}
)
puts response
response = client.indices.analyze(
index: 'my-index-000001',
body: {
analyzer: 'my_analyzer',
text: '2 Quick Foxes.'
}
)
puts response const response = await client.indices.create({
index: "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"],
},
},
},
},
});
console.log(response);
const response1 = await client.indices.analyze({
index: "my-index-000001",
analyzer: "my_analyzer",
text: "2 Quick Foxes.",
});
console.log(response1); 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/8.17/analysis-ngram-tokenizer.html