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

Фильтр токенов синонимов

Фильтр токенов synonym позволяет легко обрабатывать синонимы во время процесса анализа.

Определить наборы синонимов

Синонимы в наборе синонимов определяются с помощью правил синонимов. Каждое правило синонимов содержит слова, являющиеся синонимами.

Вы можете использовать два формата для определения правил синонимов: Solr и WordNet.

Формат Solr

Этот формат использует два разных определения:

  • Эквивалентные синонимы: Определяет группы слов, которые являются эквивалентными. Слова разделены запятыми. Пример:

    ipod, i-pod, i pod
    computer, pc, laptop
  • Явные синонимы: Сопоставляет группу слов с другими словами. Слова в левой части определения правила расширяются во все возможные варианты, описанные в правой части. Пример:

    personal computer => pc
    sea biscuit, sea biscit => seabiscuit
Формат WordNet

WordNet определяет наборы синонимов, охватывающие несколько строк. Каждая строка содержит следующую информацию:

  • Численный идентификатор набора синонимов
  • Порядковый номер синонима в наборе синонимов
  • Слово-синоним
  • Идентификатор типа слова: существительное (n), глагол (v), прилагательное (a) или наречие (b).
  • Глубина слова в сети синонимов

Следующий пример определяет набор синонимов для слов «come», «advance» и «approach»:

s(100000002,1,'come',v,1,0).
s(100000002,2,'advance',v,1,0).
s(100000002,3,'approach',v,1,0).""";

Настроить наборы синонимов

Синонимы можно настроить с помощью API синонимов, файла синонимов или непосредственно встроенных в конфигурацию фильтра токенов. Подробную информацию о каждом варианте см. в разделе сохранение набора синонимов.

Используйте synonyms_set параметр конфигурации для предоставления набора синонимов, созданного с помощью API управления синонимами:

  "filter": {
    "synonyms_filter": {
      "type": "synonym",
      "synonyms_set": "my-synonym-set",
      "updateable": true
    }
  }

Наборы синонимов должны существовать перед добавлением их в индексы. Если индекс создается с ссылкой на несуществующий набор синонимов, индекс останется в частично созданном и неработоспособном состоянии. Единственный способ восстановить такую ситуацию — убедиться, что набор синонимов существует, а затем либо удалить и пересоздать индекс, либо закрыть и снова открыть индекс.

Используйте synonyms_path для предоставления файла синонимов:

  "filter": {
    "synonyms_filter": {
      "type": "synonym",
      "synonyms_path": "analysis/synonym-set.txt"
    }
  }

Выше приведен конфигурируемый synonym фильтр с путем analysis/synonym-set.txt (относительно расположения config).

Используйте synonyms для определения встроенных синонимов:

  "filter": {
    "synonyms_filter": {
      "type": "synonym",
      "synonyms": ["pc => personal computer", "computer, pc, laptop"]
    }
  }

Дополнительные настройки:

  • updateable (по умолчанию false). Если true позволяет перезагрузить анализаторы поиска для получения изменений в файлах синонимов. Используется только для анализаторов поиска.
  • expand (по умолчанию true). Расширяет определения для эквивалентных правил синонимов. См. расширение эквивалентных правил синонимов.
  • lenient (по умолчанию значение параметра updateable). Если true игнорирует ошибки при парсинге правил синонимов. Важно отметить, что игнорируются только те правила синонимов, которые не могут быть обработаны. См. синонимы и фильтры стоп-токенов для примера поведения lenient для недопустимых правил синонимов.
expand эквивалентные правила синонимов

Параметр expand управляет расширением эквивалентных правил синонимов. Рассмотрим синоним, определенный так:

foo, bar, baz

Используя expand: true, правило синонима будет расширено до:

foo => foo
foo => bar
foo => baz
bar => foo
bar => bar
bar => baz
baz => foo
baz => bar
baz => baz

Когда expand установлено в false, правило синонима не расширяется, и первый синоним рассматривается как каноническое представление. Синоним будет эквивалентен:

foo => foo
bar => foo
baz => foo

Параметр expand не влияет на явные правила синонимов, например, foo, bar => baz.

tokenizer и ignore_case устарели

Параметр tokenizer управляет токенизаторами, которые будут использоваться для токенизации синонима, этот параметр предназначен для обратной совместимости для индексов, созданных до версии 6.0. Параметр ignore_case работает только с параметром tokenizer.

Настройка анализаторов с фильтрами токенов синонимов

Для применения синонимов вам необходимо включить фильтры токенов синонимов в анализатор:

      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["stemmer", "synonym"]
        }
      }
Порядок фильтров токенов

Порядок фильтров токенов важен. Текст будет обработан сначала через фильтры, предшествующие фильтру синонимов, прежде чем быть обработанным фильтром синонимов.

Elasticsearch также будет использовать фильтры токенов, предшествующие фильтру синонимов, в цепочке токенизаторов для анализа записей в файле или наборе синонимов. В приведенном выше примере фильтр токенов синонимов помещен после стеммера. Стеммер также будет применяться к записям синонимов.

Поскольку записи в карте синонимов не могут иметь стеков позиций, некоторые фильтры токенов могут вызывать проблемы. Фильтры токенов, которые генерируют несколько версий токена, могут выбирать, какую версию токена выводить при парсинге синонимов. Например, asciifolding будет генерировать только свернутую версию токена. Другие, такие как multiplexer, word_delimiter_graph или ngram, будут генерировать ошибку.

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

Синонимы и фильтры токенов stop

Синонимы и фильтры стоп-токенов взаимодействуют друг с другом следующим образом:

Фильтр стоп-токенов перед фильтром токенов синонимов

Стоп-слова будут удалены из определения правила синонима. Это может вызвать ошибки в правиле синонима.

Если lenient установлено в false, некорректные правила синонимов могут вызвать ошибки при применении изменений анализатора. Для перезагружаемых анализаторов это предотвращает перезагрузку и применение изменений. Вы должны исправить ошибки в правилах синонимов и перезагрузить анализатор.

Если lenient установлено в false, индекс с некорректными правилами синонимов не может быть открыт, делая его неработоспособным при:

  • Запуске узла, содержащего индекс
  • Открытии индекса из закрытого состояния
  • Перезапуске узла (который повторно открывает фрагменты, назначенные узлу)

Для явных правил синонимов, таких как foo, bar => baz с фильтром стоп-слов, удаляющим bar:

  • Если lenient установлено в false, будет выведено сообщение об ошибке, так как bar будет удалено из левой части правила синонима.
  • Если lenient установлено в true, правило foo => baz будет добавлено, а bar => baz будет проигнорировано.

Если фильтр стоп-слов удалил baz вместо этого:

  • Если lenient установлено в false, будет выведено сообщение об ошибке, так как baz будет удалено из правой части правила синонима.
  • Если lenient установлено в true, синоним не будет иметь никакого эффекта, так как целевое слово удалено.

Для эквивалентных правил синонимов, таких как foo, bar, baz и expand: true, with a stop filter that removes `bar:

  • Если lenient установлено в false, будет выведено сообщение об ошибке, так как bar будет удалено из правила синонима.
  • Если lenient установлено в true, добавленные синонимы будут эквивалентны следующим правилам синонимов, которые не содержат удаленного слова:
foo => foo
foo => baz
baz => foo
baz => baz
Фильтр стоп-токенов после фильтра токенов синонимов

Фильтр стоп-слов удалит термины из расширения синонимов.

Например, правило синонима, такое как foo, bar => baz, и фильтр стоп-слов, удаляющий baz, не найдет совпадений для foo или bar, так как оба будут расширены до baz, который удаляется фильтром стоп-слов.

Если фильтр стоп-слов удалил foo вместо этого, то поиск foo будет расширен до baz, который не удаляется фильтром стоп-слов, тем самым потенциально обеспечивая совпадения для baz.

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

Spec-Zone.ru

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