Изменить динамически упругий поиск синонимов - PullRequest
15 голосов
/ 01 сентября 2011

Можно ли сохранить в индексе синонимы эластичного поиска?Или можно получить список синонимов из базы данных, такой как couchdb?Я хотел бы динамически добавлять синонимы вasticsearch через REST-API.

Ответы [ 3 ]

16 голосов
/ 01 сентября 2011

При работе с синонимами существует два подхода:

  • расширение их во время индексации,
  • расширение их во время запроса.

Расширение синонимов во время запроса не рекомендуется, поскольку это вызывает проблемы с:

  • , так как синонимы имеют разные частоты документа,
  • синонимы с несколькими токенами, поскольку анализатор запросов разделяется на пробелы.

Подробнее об этом можно узнать по адресу http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory (на вики Solr, но актуально и для ElasticSearch).

Таким образом, рекомендуемый подход заключается в расширении синонимов во время индексации. В вашем случае, если список синонимов управляется динамически, это означает, что вам следует переиндексировать каждый документ, содержащий термин, список синонимов которого был обновлен, чтобы оценка оставалась согласованной между документами, проанализированными до и после обновления. Я не говорю, что это невозможно, но требует некоторой работы и, вероятно, вызовет проблемы с производительностью у синонимов, которые часто встречаются в вашем индексе.

3 голосов
/ 10 декабря 2015

Сейчас есть несколько новых решений для тех, которые предлагались в других ответах несколько лет назад.Два основных подхода, реализованных в виде плагинов:

  1. Фильтр file-watcher-synonym - это плагин, который может периодически перезагружать синонимы каждые заданные числа секунд, как определено пользователем.
  2. refresh-token-plugin позволяет обновлять индекс в режиме реального времени.Тем не менее, этот плагин имеет некоторые проблемы, связанные с тем, что эластичный поиск не может отличить анализаторы во время поиска только от тех, которые используются во время индекса.

Хорошую дискуссию на эту тему можно найти в системе билетов elastisearch github: https://github.com/brusic/refresh-token-filters

2 голосов
/ 24 сентября 2011

Обновление списка синонимов не слишком сложно вasticsearch. Это можно сделать, открыв и закрыв. Вы можете управлять им из любой точки мира, но вам нужна некоторая собственная инфраструктура. Это будет работать так:

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