Я играю с Solr-powered для поиска моего webapp, и я решил, что лучше использовать DataImportHandler для обработки синхронизации с приложением через базу данных. Мне нравится элегантность просто проверки поля last_updated_date
. Хорошая вещь. Однако я не знаю, как обращаться с удалением документов с помощью этого подхода. Как я его вижу, у меня есть два варианта. Я мог либо отправить явное сообщение Solr из клиента, когда документ был удален, либо я могу добавить "удаленный" флаг и оставить объект в базе данных, чтобы Solr заметил, что документ был изменен и теперь "удален" ". Я мог бы добавить фильтр запросов, который будет игнорировать результаты с удаленным флагом, но представляется неэффективным включать все удаленные документы в индекс Lucene. Что делают другие люди?
Solr DIH - Как обрабатывать удаленные документы?
Ответ 1
Это ваши варианты:
- Используйте специальные команды DIH $deleteDocById или $deleteDocByQuery (требуется Solr 1.4 +)
- Используйте очистить параметр DIH, чтобы удалить весь индекс перед импортом.
- Используйте preImportDeleteQuery, чтобы определить, что будет очищено перед импортом. (требуется Solr 1.4 +)
- Используйте триггеры базы данных вместо DIH для управления обновлением индекса.
- Если вы используете какой-то ORM, используйте его возможности перехвата вместо DIH. Например, вы можете использовать hibernate events для обновления индекса при обновлении, вставке или удалении.
Ответ 2
Мне нравится иметь "удаленный" флаг, поэтому я фактически не удаляю свои данные! Зависит от того, насколько вы параноики. Мне нравятся предложения Маурисио...