Фильтр токенов Hunspell
Предоставляет лексическое стемминг на основе предоставленного словаря Hunspell. Для работы фильтра hunspell требуется настройка одного или нескольких словарей Hunspell, специфичных для языка.
Этот фильтр использует HunspellStemFilter Lucene.
Если доступно, рекомендуется попробовать алгоритмический стеммер для вашего языка, прежде чем использовать фильтр токенов hunspell. На практике алгоритмические стеммеры обычно превосходят лексические стеммеры. Смотрите Лексические стеммеры.
Настройка словарей Hunspell
Словари Hunspell хранятся и обнаруживаются в отдельном каталоге hunspell на файловой системе: <$ES_PATH_CONF>/hunspell. Ожидается, что каждый словарь будет иметь свой собственный каталог, названный в соответствии с ассоциированным языком и локалью (например, pt_BR, en_GB). Этот каталог словаря должен содержать один .aff и один или несколько файлов .dic, все из которых будут автоматически обнаружены. Например, следующая структура каталогов определит словарь en_US:
- config
|-- hunspell
| |-- en_US
| | |-- en_US.dic
| | |-- en_US.aff Каждый словарь может быть настроен с одним параметром:
-
ignore_case -
(Статический, Булево) Если значение true, соответствие словарей будет регистронезависимым. По умолчанию
false.Этот параметр можно настроить глобально в
elasticsearch.ymlс помощьюindices.analysis.hunspell.dictionary.ignore_case.Для настройки параметра для определенной локали используйте параметр
indices.analysis.hunspell.dictionary.<locale>.ignore_case(например, для локалиen_US(американский английский) параметр равенindices.analysis.hunspell.dictionary.en_US.ignore_case).Вы также можете добавить файл
settings.ymlв каталог словаря, который содержит эти настройки. Это переопределяет любые другие настройкиignore_case, определённые вelasticsearch.yml.
Пример
Следующий запрос API анализа использует фильтр hunspell для стемминга the foxes jumping quickly до the fox jump quick.
Запрос указывает локаль en_US, что означает, что используются файлы .aff и .dic в каталоге <$ES_PATH_CONF>/hunspell/en_US для словаря Hunspell.
resp = client.indices.analyze(
tokenizer="standard",
filter=[
{
"type": "hunspell",
"locale": "en_US"
}
],
text="the foxes jumping quickly",
)
print(resp) const response = await client.indices.analyze({
tokenizer: "standard",
filter: [
{
type: "hunspell",
locale: "en_US",
},
],
text: "the foxes jumping quickly",
});
console.log(response); GET /_analyze
{
"tokenizer": "standard",
"filter": [
{
"type": "hunspell",
"locale": "en_US"
}
],
"text": "the foxes jumping quickly"
} Фильтр генерирует следующие токены:
[ the, fox, jump, quick ]
Настраиваемые параметры
-
dictionary -
(Необязательно, строка или массив строк) Один или несколько файлов
.dic(например,en_US.dic, my_custom.dic), которые нужно использовать для словаря Hunspell.По умолчанию, фильтр
hunspellиспользует все файлы.dicв каталоге<$ES_PATH_CONF>/hunspell/<locale>, указанном с помощью параметраlang,languageилиlocale. -
dedup - (Необязательно, Булево) Если
true, дублирующиеся токены удаляются из выходных данных фильтра. По умолчаниюtrue. -
lang -
(Обязательно*, строка) Псевдоним для параметра
locale.Если этот параметр не указан, требуется параметр
languageилиlocale. -
language -
(Обязательно*, строка) Псевдоним для параметра
locale.Если этот параметр не указан, требуется параметр
langилиlocale.
-
locale -
(Обязательно*, строка) Каталог локали, используемый для указания файлов
.affи.dicдля словаря Hunspell. Смотрите Настройка словарей Hunspell.Если этот параметр не указан, требуется параметр
langилиlanguage. -
longest_only - (Необязательно, Булево) Если
true, в выходные данные включается только наиболее длинная стеммированная версия каждого токена. Еслиfalse, включаются все стеммированные версии токена. По умолчаниюfalse.
Настройка и добавление в анализатор
Для настройки фильтра hunspell, продублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.
Например, следующий запрос создания индекса использует настраиваемый фильтр hunspell, my_en_US_dict_stemmer, для настройки нового пользовательского анализатора.
Фильтр my_en_US_dict_stemmer использует каталог locale из en_US, что означает, что используются файлы .aff и .dic в каталоге <$ES_PATH_CONF>/hunspell/en_US. Фильтр также включает параметр dedup со значением false, что означает, что дублирующие токены, добавленные из словаря, не удаляются из выходных данных фильтра.
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"en": {
"tokenizer": "standard",
"filter": [
"my_en_US_dict_stemmer"
]
}
},
"filter": {
"my_en_US_dict_stemmer": {
"type": "hunspell",
"locale": "en_US",
"dedup": False
}
}
}
},
)
print(resp) response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
en: {
tokenizer: 'standard',
filter: [
'my_en_US_dict_stemmer'
]
}
},
filter: {
"my_en_US_dict_stemmer": {
type: 'hunspell',
locale: 'en_US',
dedup: false
}
}
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
en: {
tokenizer: "standard",
filter: ["my_en_US_dict_stemmer"],
},
},
filter: {
my_en_US_dict_stemmer: {
type: "hunspell",
locale: "en_US",
dedup: false,
},
},
},
},
});
console.log(response); PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"en": {
"tokenizer": "standard",
"filter": [ "my_en_US_dict_stemmer" ]
}
},
"filter": {
"my_en_US_dict_stemmer": {
"type": "hunspell",
"locale": "en_US",
"dedup": false
}
}
}
}
} Настройки
Помимо ignore_case настроек, вы можете настроить следующие глобальные настройки для фильтра hunspell с помощью elasticsearch.yml:
-
indices.analysis.hunspell.dictionary.lazy - (Статический, Булево) Если
true, загрузка словарей Hunspell откладывается до использования словаря. Еслиfalse, каталог словарей проверяется при запуске узла, и любые словари автоматически загружаются. По умолчанию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/8.17/analysis-hunspell-tokenfilter.html