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

Фильтр токенов Dictionary decompounder

В большинстве случаев мы рекомендуем использовать более быстрый фильтр токенов hyphenation_decompounder вместо этого фильтра. Однако вы можете использовать фильтр dictionary_decompounder, чтобы проверить качество списка слов перед его внедрением в фильтр hyphenation_decompounder.

Использует указанный список слов и грубый подход для поиска подслов в составных словах. Если подслово найдено, оно включается в выходные токены.

Этот фильтр использует DictionaryCompoundWordTokenFilter Lucene, который был разработан для германских языков.

Пример

Следующий запрос API analyze API использует фильтр dictionary_decompounder для поиска подслов в Donaudampfschiff. Затем фильтр сравнивает эти подслова со списком указанных слов: Donau, dampf, meer и schiff.

resp = client.indices.analyze(
    tokenizer="standard",
    filter=[
        {
            "type": "dictionary_decompounder",
            "word_list": [
                "Donau",
                "dampf",
                "meer",
                "schiff"
            ]
        }
    ],
    text="Donaudampfschiff",
)
print(resp)
response = client.indices.analyze(
  body: {
    tokenizer: 'standard',
    filter: [
      {
        type: 'dictionary_decompounder',
        word_list: [
          'Donau',
          'dampf',
          'meer',
          'schiff'
        ]
      }
    ],
    text: 'Donaudampfschiff'
  }
)
puts response
const response = await client.indices.analyze({
  tokenizer: "standard",
  filter: [
    {
      type: "dictionary_decompounder",
      word_list: ["Donau", "dampf", "meer", "schiff"],
    },
  ],
  text: "Donaudampfschiff",
});
console.log(response);
GET _analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "dictionary_decompounder",
      "word_list": ["Donau", "dampf", "meer", "schiff"]
    }
  ],
  "text": "Donaudampfschiff"
}

Фильтр генерирует следующие токены:

[ Donaudampfschiff, Donau, dampf, schiff ]

Настраиваемые параметры

word_list

(Обязательный*, массив строк) Список подслов для поиска в потоке токенов. Если подслово найдено, оно включается в выходные токены.

Необходимо указать либо этот параметр, либо word_list_path.

word_list_path

(Обязательный*, строка) Путь к файлу, содержащему список подслов для поиска в потоке токенов. Если подслово найдено, оно включается в выходные токены.

Этот путь должен быть абсолютным или относительным к расположению config, а файл должен быть закодирован в UTF-8. Каждый токен в файле должен быть разделен символом новой строки.

Необходимо указать либо этот параметр, либо word_list.

max_subword_size
(Необязательный, целое число) Максимальная длина подслов. Токены подслов большей длины исключаются из вывода. По умолчанию значение 15.
min_subword_size
(Необязательный, целое число) Минимальная длина подслов. Токены подслов меньшей длины исключаются из вывода. По умолчанию значение 2.
min_word_size
(Необязательный, целое число) Минимальная длина слов. Токены слов меньшей длины исключаются из вывода. По умолчанию значение 5.
only_longest_match
(Необязательный, логическое значение) Если true, включать только самое длинное совпадающее подслово. По умолчанию значение false.

Настройка и добавление в анализатор

Чтобы настроить фильтр dictionary_decompounder, продублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.

Например, следующий запрос API create index API использует пользовательский фильтр dictionary_decompounder для настройки нового пользовательского анализатора.

Пользовательский фильтр dictionary_decompounder находит подслова в файле analysis/example_word_list.txt. Подслова длиной более 22 символов исключаются из выходных токенов.

resp = client.indices.create(
    index="dictionary_decompound_example",
    settings={
        "analysis": {
            "analyzer": {
                "standard_dictionary_decompound": {
                    "tokenizer": "standard",
                    "filter": [
                        "22_char_dictionary_decompound"
                    ]
                }
            },
            "filter": {
                "22_char_dictionary_decompound": {
                    "type": "dictionary_decompounder",
                    "word_list_path": "analysis/example_word_list.txt",
                    "max_subword_size": 22
                }
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "dictionary_decompound_example",
  settings: {
    analysis: {
      analyzer: {
        standard_dictionary_decompound: {
          tokenizer: "standard",
          filter: ["22_char_dictionary_decompound"],
        },
      },
      filter: {
        "22_char_dictionary_decompound": {
          type: "dictionary_decompounder",
          word_list_path: "analysis/example_word_list.txt",
          max_subword_size: 22,
        },
      },
    },
  },
});
console.log(response);
PUT dictionary_decompound_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_dictionary_decompound": {
          "tokenizer": "standard",
          "filter": [ "22_char_dictionary_decompound" ]
        }
      },
      "filter": {
        "22_char_dictionary_decompound": {
          "type": "dictionary_decompounder",
          "word_list_path": "analysis/example_word_list.txt",
          "max_subword_size": 22
        }
      }
    }
  }
}

© 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-dict-decomp-tokenfilter.html

Spec-Zone.ru

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