Как сделано у нас: есть общая реляционная бд где лежат данные о продуктах, и есть солр. Каждые N минут пробегает SQL запрос, который находит недавно обновленные продукты (по разным параметрам; от простого времени обновления до связей со стоками, ценами, каталогами, и тд и тп), и обновляет их в солре.
Но недавно мы заметили что это решение начало тормозить (слишком много факторов на которые смотрит SQL запрос, из-за этого он стал монструозным), и переписали на новое решение. Теперь у нас у моделек продуктов и связанных моделек (те же стоки, прайсы, и тп) есть after save listeners, которые при обновлении данных записывают id продукта в специальную таблицу. А потом раз в N минут все продукты из этой таблицы обновляются в солре
Ps модели - это маппинг орм на бд, энтити (у нас спринг)