Фильтр стоп-слов
Удаляет стоп-слова из потока токенов.
Без настройки фильтр по умолчанию удаляет следующие стоп-слова на английском языке:
a, an, and, are, as, at, be, but, by, for, if, in, into, is, it, no, not, of, on, or, such, that, the, their, then, there, these, they, this, to, was, will, with
В дополнение к английскому языку, фильтр stop поддерживает предварительно определённые списки стоп-слов для нескольких языков. Вы также можете указать собственные стоп-слова в виде массива или файла.
Фильтр stop использует StopFilter из Lucene.
Пример
Следующий запрос API analyze использует фильтр stop для удаления стоп-слов a и the из a quick fox jumps over the lazy dog:
resp = client.indices.analyze(
tokenizer="standard",
filter=[
"stop"
],
text="a quick fox jumps over the lazy dog",
)
print(resp) response = client.indices.analyze(
body: {
tokenizer: 'standard',
filter: [
'stop'
],
text: 'a quick fox jumps over the lazy dog'
}
)
puts response const response = await client.indices.analyze({
tokenizer: "standard",
filter: ["stop"],
text: "a quick fox jumps over the lazy dog",
});
console.log(response); GET /_analyze
{
"tokenizer": "standard",
"filter": [ "stop" ],
"text": "a quick fox jumps over the lazy dog"
} Фильтр производит следующие токены:
[ quick, fox, jumps, over, lazy, dog ]
Добавление в анализатор
Следующий запрос API создания индекса использует фильтр stop для конфигурации нового настраиваемого анализатора.
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"filter": [
"stop"
]
}
}
}
},
)
print(resp) response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: 'whitespace',
filter: [
'stop'
]
}
}
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: "whitespace",
filter: ["stop"],
},
},
},
},
});
console.log(response); PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"filter": [ "stop" ]
}
}
}
}
} Настраиваемые параметры
-
stopwords -
(Необязательно, строка или массив строк) Значение языка, например
_arabic_или_thai_. По умолчанию_english_.Каждое значение языка соответствует предварительно определённому списку стоп-слов в Lucene. См. Список стоп-слов по языку для поддерживаемых значений языка и их стоп-слов.
Также принимает массив стоп-слов.
Для пустого списка стоп-слов используйте
_none_. -
stopwords_path -
(Необязательно, строка) Путь к файлу, содержащему список стоп-слов для удаления.
Этот путь должен быть абсолютным или относительным к местоположению
config, а файл должен быть в формате UTF-8. Каждое стоп-слово в файле должно быть разделено символом новой строки. -
ignore_case - (Необязательно, булево) Если
true, сопоставление стоп-слов не учитывает регистр. Например, еслиtrue, стоп-словоtheсоответствует и удаляетThe,THEилиthe. По умолчаниюfalse. -
remove_trailing -
(Необязательно, булево) Если
true, последний токен потока удаляется, если это стоп-слово. По умолчаниюtrue.Этот параметр должен быть
falseпри использовании фильтра с комплешн-суггестером. Это обеспечит соответствие запросу, например,green aи предложениюgreen apple, одновременно удаляя другие стоп-слова.
Настройка
Чтобы настроить фильтр стоп-слов, дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.
Например, следующий запрос создаёт пользовательский фильтр стоп-слов stop, не учитывающий регистр, который удаляет стоп-слова из списка _english_:
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"default": {
"tokenizer": "whitespace",
"filter": [
"my_custom_stop_words_filter"
]
}
},
"filter": {
"my_custom_stop_words_filter": {
"type": "stop",
"ignore_case": True
}
}
}
},
)
print(resp) response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
default: {
tokenizer: 'whitespace',
filter: [
'my_custom_stop_words_filter'
]
}
},
filter: {
my_custom_stop_words_filter: {
type: 'stop',
ignore_case: true
}
}
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
default: {
tokenizer: "whitespace",
filter: ["my_custom_stop_words_filter"],
},
},
filter: {
my_custom_stop_words_filter: {
type: "stop",
ignore_case: true,
},
},
},
},
});
console.log(response); PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "whitespace",
"filter": [ "my_custom_stop_words_filter" ]
}
},
"filter": {
"my_custom_stop_words_filter": {
"type": "stop",
"ignore_case": true
}
}
}
}
} Вы также можете указать собственный список стоп-слов. Например, следующий запрос создаёт пользовательский фильтр стоп-слов stop, не учитывающий регистр, который удаляет только стоп-слова and, is и the:
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"default": {
"tokenizer": "whitespace",
"filter": [
"my_custom_stop_words_filter"
]
}
},
"filter": {
"my_custom_stop_words_filter": {
"type": "stop",
"ignore_case": True,
"stopwords": [
"and",
"is",
"the"
]
}
}
}
},
)
print(resp) response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
default: {
tokenizer: 'whitespace',
filter: [
'my_custom_stop_words_filter'
]
}
},
filter: {
my_custom_stop_words_filter: {
type: 'stop',
ignore_case: true,
stopwords: [
'and',
'is',
'the'
]
}
}
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
default: {
tokenizer: "whitespace",
filter: ["my_custom_stop_words_filter"],
},
},
filter: {
my_custom_stop_words_filter: {
type: "stop",
ignore_case: true,
stopwords: ["and", "is", "the"],
},
},
},
},
});
console.log(response); PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "whitespace",
"filter": [ "my_custom_stop_words_filter" ]
}
},
"filter": {
"my_custom_stop_words_filter": {
"type": "stop",
"ignore_case": true,
"stopwords": [ "and", "is", "the" ]
}
}
}
}
} Стоп-слова по языкам
Следующий список содержит поддерживаемые значения языка для параметра stopwords и ссылку на их предопределенные стоп-слова в Lucene.
-
_arabic_ - Арабские стоп-слова
-
_armenian_ - Армянские стоп-слова
-
_basque_ - Баскские стоп-слова
-
_bengali_ - Бенгальские стоп-слова
-
_brazilian_(Brazilian Portuguese) - Стоп-слова бразильского португальского
-
_bulgarian_ - Болгарские стоп-слова
-
_catalan_ - Каталанские стоп-слова
-
_cjk_(Chinese, Japanese, and Korean) - CJK стоп-слова
-
_czech_ - Чешские стоп-слова
-
_danish_ - Датские стоп-слова
-
_dutch_ - Голландские стоп-слова
-
_english_ - Английские стоп-слова
-
_estonian_ - Эстонские стоп-слова
-
_finnish_ - Финские стоп-слова
-
_french_ - Французские стоп-слова
-
_galician_ - Галисийские стоп-слова
-
_german_ - Немецкие стоп-слова
-
_greek_ - Греческие стоп-слова
-
_hindi_ - Хинди стоп-слова
-
_hungarian_ - Венгерские стоп-слова
-
_indonesian_ - Индонезийские стоп-слова
-
_irish_ - Ирландские стоп-слова
-
_italian_ - Итальянские стоп-слова
-
_latvian_ - Латышские стоп-слова
-
_lithuanian_ - Литовские стоп-слова
-
_norwegian_ - Норвежские стоп-слова
-
_persian_ - Персидские стоп-слова
-
_portuguese_ - Португальские стоп-слова
-
_romanian_ - Румынские стоп-слова
-
_russian_ - Русские стоп-слова
-
_serbian_ - Сербские стоп-слова
-
_sorani_ - Стоп-слова сорани
-
_spanish_ - Испанские стоп-слова
-
_swedish_ - Шведские стоп-слова
-
_thai_ - Стоп-слова тайского языка
-
_turkish_ - Стоп-слова турецкого языка
© 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-stop-tokenfilter.html