Фильтр токенов Shingle
Добавляет шинглы, или слово n-граммы, в поток токенов, конкатенируя смежные токены. По умолчанию, фильтр токенов shingle выводит шинглы из двух слов и униграммы.
Например, многие токенизаторы преобразуют the lazy dog в [ the, lazy, dog ]. Вы можете использовать фильтр shingle, чтобы добавить шинглы из двух слов в этот поток: [ the, the lazy, lazy, lazy dog, dog ].
Шинглы часто используются для ускорения запросов по фразам, таких как match_phrase. Вместо создания шинглов с помощью фильтра shingles, мы рекомендуем использовать параметр index-phrases для соответствующего поля text вместо этого.
Этот фильтр использует ShingleFilter из Lucene.
Пример
Следующий запрос анализа API использует фильтр shingle, чтобы добавить шинглы из двух слов в поток токенов для quick brown fox jumps:
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [ "shingle" ],
"text": "quick brown fox jumps"
} Фильтр производит следующие токены:
[ quick, quick brown, brown, brown fox, fox, fox jumps, jumps ]
Для получения шинглов из 2-3 слов, добавьте следующие аргументы в запрос анализа API:
-
min_shingle_size:2 -
max_shingle_size:3
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [
{
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3
}
],
"text": "quick brown fox jumps"
} Фильтр производит следующие токены:
[ quick, quick brown, quick brown fox, brown, brown fox, brown fox jumps, fox, fox jumps, jumps ]
Чтобы включить только шинглы в выходные данные, добавьте аргумент output_unigrams со значением false в запрос.
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [
{
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3,
"output_unigrams": false
}
],
"text": "quick brown fox jumps"
} Фильтр производит следующие токены:
[ quick brown, quick brown fox, brown fox, brown fox jumps, fox jumps ]
Добавление в анализатор
Следующий запрос создания индекса API использует фильтр shingle для настройки нового пользовательского анализатора.
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"standard_shingle": {
"tokenizer": "standard",
"filter": [ "shingle" ]
}
}
}
}
} Настраиваемые параметры
-
max_shingle_size -
(Необязательно, целое число) Максимальное количество токенов для конкатенации при создании шинглов. По умолчанию равно
2.Это значение не может быть меньше значения аргумента
min_shingle_size, которое по умолчанию равно2. Разница между этим значением и аргументомmin_shingle_sizeне может превышать значение параметраindex.max_shingle_diffна уровне индекса, которое по умолчанию равно3. -
min_shingle_size -
(Необязательно, целое число) Минимальное количество токенов для конкатенации при создании шинглов. По умолчанию равно
2.Это значение не может превышать значение аргумента
max_shingle_size, которое по умолчанию равно2. Разница между аргументомmax_shingle_sizeи этим значением не может превышать значение параметраindex.max_shingle_diffна уровне индекса, которое по умолчанию равно3. -
output_unigrams - (Необязательно, Булево) Если
true, выходные данные включают исходные входные токены. Еслиfalse, выходные данные включают только шинглы; исходные входные токены удаляются. По умолчанию равноtrue. -
output_unigrams_if_no_shingles -
Если
true, выходные данные включают исходные входные токены только если не созданы шинглы; если шинглы созданы, выходные данные содержат только шинглы. По умолчанию равноfalse.Если оба параметра, этот и
output_unigrams, равныtrue, используется только аргументoutput_unigrams. -
token_separator - (Необязательно, строка) Разделитель, используемый для конкатенации смежных токенов для формирования шингла. По умолчанию пробел (
" "). -
filler_token -
(Необязательно, строка) Строка, используемая в шинглах для замены пустых позиций, не содержащих токен. Этот заполняющий токен используется только в шинглах, а не в исходных униграммах. По умолчанию нижнее подчеркивание (
_).Некоторые фильтры токенов, такие как фильтр
stop, создают пустые позиции при удалении стоп-слов с позиционным инкрементом больше одного.Пример
В следующем запросе анализа API, фильтр
stopудаляет стоп-словоaизfox jumps a lazy dog, создавая пустую позицию. Последующий фильтрshingleзаменяет эту пустую позицию знаком плюс (+) в шинглах.GET /_analyze { "tokenizer": "whitespace", "filter": [ { "type": "stop", "stopwords": [ "a" ] }, { "type": "shingle", "filler_token": "+" } ], "text": "fox jumps a lazy dog" }Фильтр производит следующие токены:
[ fox, fox jumps, jumps, jumps +, + lazy, lazy, lazy dog, dog ]
Настройка
Чтобы настроить фильтр shingle, продублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.
Например, следующий запрос создания индекса API использует пользовательский фильтр shingle, my_shingle_filter, для настройки нового пользовательского анализатора.
Фильтр my_shingle_filter использует min_shingle_size равный 2 и max_shingle_size равный 5, что означает, что он генерирует шинглы из 2-5 слов. Фильтр также использует аргумент output_unigrams со значением false, означающее, что в выходных данных содержатся только шинглы.
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"en": {
"tokenizer": "standard",
"filter": [ "my_shingle_filter" ]
}
},
"filter": {
"my_shingle_filter": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 5,
"output_unigrams": false
}
}
}
}
}
© 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-shingle-tokenfilter.html