Лучшие практики для синхронизации репозитория Lucene с исходными данными? - PullRequest
3 голосов
/ 23 ноября 2011

Я разрабатываю приложение, которое будет сильно зависеть от поиска с использованием репозитория Lucene.NET. Хранилище будет построено с использованием данных из оперативной базы данных, которая постоянно изменяется. Я пытаюсь найти лучшую стратегию синхронизации репозитория Lucene с исходной базой данных. Нужно ли запускать службу, которая просыпается каждые несколько минут, запрашивает в базе данных обновленные записи и добавляет / удаляет из индекса Lucene? Должен ли я перестраивать репозиторий Lucene каждую ночь и терпеть некоторую задержку в данных?

Каковы наилучшие практики для сохранения данных в хранилище Lucene свежими? Как различные стратегии влияют на задержку, производительность и т. Д.? 1003 *

1 Ответ

3 голосов
/ 23 ноября 2011

Lucene способен выполнять так называемый поиск в режиме реального времени, что означает, что обновления индекса можно увидеть в результатах запроса практически мгновенно. Таким образом, вы можете свободно отправлять обновления, как только они сохраняются в базе данных - у Lucene не должно быть проблем с обработкой даже довольно частых обновлений, как, например, с его помощью создается поиск в Twitter (конечно, для поддержания такой большой нагрузки нужно будет распределить ваш индекс).

Поэтому желательно, чтобы вы отправляли свои обновления в некотором коде, который срабатывает после совершения транзакции. Трудно сказать что-то более конкретное, не зная, какую базу данных или систему очередей вы используете. Некоторые общие соображения по этому вопросу, а также примеры использования его вместе с CouchDB или RabbitMQ приведены в документации asticsearch river .

...