Периодический индексатор для Solr - PullRequest
0 голосов
/ 13 марта 2012

Я написал собственный индексатор, использующий php для импорта данных в solr из mysql вместо использования собственного обработчика импорта данных solr. Это работает отлично, но я застрял при выполнении периодической индексации. Вот процесс в моей голове:

  1. Поиск по всему индексу и поиск удаленных объектов, сравнивая их с данные в MySQL и удалить их из Solr.

  2. Найти недавно измененные объекты в mysql и только проиндексировать их. (Я как минимум 12 таблиц на ядро ​​и мне нужно все проверить)

Итак, мой вопрос: это хороший способ или вы предлагаете что-то более эффективное? Спасибо.

PS: я не использовал обработчик импорта данных solr, потому что было слишком много вещей, которые я мог бы сделать сам, например, иерархическое управление данными и т. Д. Я не знаю, смогу ли я сделать все это с помощью обработчика импорта данных.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Вы можете начать отслеживать изменения, когда элементы изменены или удалены из вашей БД.Тогда вам нужно будет только просмотреть этот список, чтобы обновить свой индекс.Или добавьте поле «созданный / последний обновленный» к вашим объектам БД.Но это может быть сложной задачей в зависимости от архитектуры и логики вашей системы.

Вы также можете сэкономить на проверке наличия ваших элементов в базе данных или индексе и просто переиндексировать все - на наборах данных, не очень больших, которые могли быбыть быстрее (просто убедитесь, что тот же индексированный объект получит тот же идентификатор Solr, что и раньше, чтобы заменить его более старую версию вместо дублирования).

Другой способ - использовать только так называемый «дельта-индекс»содержащий недавно измененные элементы, поэтому вам нужно объединить Solr с Solr, а не Solr с DB.

Если вам все еще нужно проверять каждый отдельный элемент, вероятно, было бы лучше сначала запросить их у DB, посколькуПоиск Solr, как правило, быстрее.Затем вы можете выполнить запрос Solr в пакете, запрашивающем сразу несколько документов по их идентификатору, и пройти через этот набор, чтобы сопоставить их с вашими записями в БД.Так что что-то вроде запроса N результатов из БД / выдачи их идентификаторов Solr / запроса N документов Solr по идентификатору в одном наборе запросов / совпадений должно работать.Но это, очевидно, метод "грубой силы".

0 голосов
/ 14 марта 2012

Другой вариант - реализовать в вашем приложении фильтр (например, перехватчик запросов - не знаю для PHP, но он называется «Фильтр в мире сервлетов Java»), который немедленно обновляет документ в solr, так как он изменяется через ваш приложение в mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...