2009-10-12 2 views
16

Я играю с Solr-powered для поиска моего webapp, и я решил, что лучше всего использовать DataImportHandler для обработки синхронизации с приложением через базу данных. Мне нравится элегантность просто проверки поля last_updated_date. Хорошая вещь. Однако я не знаю, как обращаться с удалением документов с помощью этого подхода. То, как я это вижу, у меня есть два варианта. Я мог либо отправить явное сообщение Solr из клиента, когда документ был удален, либо я могу добавить «удаленный» флаг и оставить объект в базе данных, чтобы Solr заметил, что документ был изменен и теперь «удален» «. Я мог бы добавить фильтр запросов, который будет игнорировать результаты с удаленным флагом, но представляется неэффективным включать все удаленные документы в индекс Lucene. Что делают другие люди?Solr DIH - Как обрабатывать удаленные документы?

ответ

20

Это ваши варианты:

  • Используйте DIH special commands $ deleteDocById или $ deleteDocByQuery (требуется Solr 1.4+)
  • Используйте clean parameter из DIH удалить весь индекс перед импортом.
  • Используйте preImportDeleteQuery, чтобы определить, что будет очищено перед импортом. (требуется Solr 1.4+)
  • Используйте триггеры базы данных вместо DIH для управления обновлением индекса.
  • Если вы используете какой-то ORM, используйте его возможности перехвата вместо DIH. Например, вы можете использовать hibernate events для обновления индекса при обновлении, вставке или удалении.
+0

Это отличный список! Я все еще использую 1.3, но это убедительная причина для поиска переключения. –

+0

Да, Solr 1.4 просто пошел RC, окончательный релиз неминуем. –

+0

Привет, Маурисио, есть ли хорошие примеры использования preImportDeleteQuery, когда вы делаете дельта-импорт на удаленные документы? – Joyce

2

Мне нравится иметь «удаленный» флаг, поэтому я фактически не удаляю свои данные! Зависит от того, насколько вы параноики. Мне нравятся предложения Маурисио ...

+0

"deleted" flag = Хороший звонок! – Brian

Смежные вопросы