как лучше всего переиндексировать только те модели, которые изменились во время простоя solr?

если у меня есть миллионы пользовательских записей с некоторыми текстовыми полями, которые индексируются в solr при создании и обновлении, как мне вернуться и переиндексировать несколько записей, которые никогда не попадали в solr?

то есть что, если solr отключится на несколько минут в течение дня и около 300 записей из миллионов так и не будут проиндексированы.

Я не хочу переиндексировать миллионы записей, только 300.


person Andrew Arrow    schedule 04.05.2011    source источник
comment
нашел отличную жемчужину: github.com/bdurand/sunspot_index_queue   -  person Andrew Arrow    schedule 05.05.2011


Ответы (1)


Хороший способ справиться с этим — просто вставить идентификаторы записей в таблицу очереди при создании и обновлении, а затем запустить процесс для индексации записей. Таким образом, если Solr выйдет из строя, вам не придется беспокоиться о том, какие записи не были обработаны, они просто останутся в очереди, пока не будут обработаны. Преимущество этого заключается в том, что вашей базе данных не нужно ждать завершения обновления solr перед завершением транзакции. Недостатком является то, что Solr не полностью синхронизируется с тем, что находится в базе данных. Вы можете настроить частоту запуска программы чтения очереди в соответствии с вашими потребностями.

person Kibbee    schedule 04.05.2011
comment
отличные очки. почему я позволяю этой критически важной операции выполняться в реальном времени. у нас другие очереди, это тоже должна быть очередь. Благодарю. - person Andrew Arrow; 04.05.2011
comment
+1 за это. Очередь — это абсолютно правильный подход к обновлениям Solr. Другой подход заключается в том, чтобы сохранить какую-либо метку времени indexed_at в ваших записях, когда они были успешно проиндексированы, и использовать ее для поиска пакетов, которые необходимо обновить. - person Nick Zadrozny; 10.05.2011