Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Анализ текста ›Справочник по фильтрам токенов

Фильтр токенов 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API