Фильтр токенов синонимической графы
Фильтр токенов synonym_graph позволяет легко обрабатывать синонимы, включая многословные синонимы правильно во время процесса анализа.
Для правильной обработки многословных синонимов этот фильтр токенов создаёт потоки токенов графов во время обработки. Для получения дополнительной информации по этой теме и её различным сложностям, пожалуйста, прочтите статью в блоге Lucene’s TokenStreams are actually graphs.
Этот фильтр токенов предназначен для использования в качестве части анализирующего запроса. Если вы хотите применить синонимы при индексации, используйте стандартный фильтр токенов синонимов.
Определить наборы синонимов
Синонимы в наборе синонимов определяются с помощью правил синонимов. Каждое правило синонимов содержит слова, являющиеся синонимами.
Вы можете использовать два формата для определения правил синонимов: 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_graph",
"synonyms_set": "my-synonym-set",
"updateable": true
}
} Наборы синонимов должны существовать до того, как их можно будет добавить в индексы. Если индекс создан со ссылкой на несуществующий набор синонимов, индекс останется в частично созданном и неработоспособном состоянии. Единственный способ восстановить ситуацию — убедиться, что набор синонимов существует, а затем либо удалить и пересоздать индекс, либо закрыть и повторно открыть индекс.
Используйте synonyms_path для предоставления файла синонимов:
"filter": {
"synonyms_filter": {
"type": "synonym_graph",
"synonyms_path": "analysis/synonym-set.txt"
}
} Выше указан конфигурация фильтра synonym с путём analysis/synonym-set.txt (относительно расположения config).
Используйте synonyms для определения встроенных синонимов:
"filter": {
"synonyms_filter": {
"type": "synonym_graph",
"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_graph"]
}
} Порядок фильтров токенов
Порядок фильтров токенов важен. Текст будет обрабатываться сначала через фильтры, предшествующие фильтру синонимов, перед обработкой фильтром синонимов.
Elasticsearch также будет использовать фильтры токенов, предшествующие фильтру синонимов, в цепочке токенизатора для обработки записей в файле или наборе синонимов. В приведенном выше примере фильтр токенов графа синонимов расположен после стемера. Стеммер также будет применяться к записям синонимов.
Поскольку записи в карте синонимов не могут иметь накопленные позиции, некоторые фильтры токенов могут вызывать проблемы. Фильтры токенов, которые производят несколько версий токена, могут выбирать, какую версию токена вывести при разборе синонимов. Например, asciifolding будет производить только свёрнутую версию токена. Другие, такие как multiplexer, word_delimiter_graph или ngram, приведут к ошибке.
Если вам нужно создать анализаторы, которые включают в себя как фильтры многотокенов, так и фильтры синонимов, рассмотрите использование фильтра Multiplexer, с фильтрами многотокенов в одной ветке и фильтром синонимов в другой.
Синонимы и фильтры токенов 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-graph-tokenfilter.html