2015-11-14 4 views
0

Я использую Sunspot wich является Solr-based search engine на моем приложении rails.Автоматическая переиндексация Sunspot/Solr on edit

Согласно this Rails Cast episode on Search with Sunspot:

автоматически индексов солнечных пятен какие-либо новые записи, но не существующих. Мы можем сказать Sunspot, чтобы пересмотреть существующие записи, запустив: rake sunspot:reindex

Что должно в основном переиндексировать всю модель.

Однако, у меня есть модель (TicketSubject), с атрибутом, category, и я хотел бы проиндексировать в ticket_subject каждый раз, когда есть едит на его category.

Как я могу это сделать?

ответ

1

Почему вы не используете обратный вызов ActiveRecord для этого, т. Е. after_update?

after_update() Вызывается после Base.save на существующих объектах, имеющих запись. Обратите внимание, что этот обратный вызов все еще завернут в транзакцию вокруг сохранения. Например, если вы вызываете внешний указатель в этот момент, он не увидит изменений в базе данных. http://api.rubyonrails.org/v2.3.8/classes/ActiveRecord/Callbacks.html#M001377

Определение: Callbacks крючки в жизненном цикле активного объекта записи, которые позволяют триггерной логики до или после изменения состояния объекта. http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

Спасибо за ваш ответ, я тоже думал в этой строке, что такое команда «sunspost», которая будет запущена для переопределения только определенного объекта, который изменился, а не всей записи? –

+0

Объект - это запись. Скажем, когда атрибут категории TicketSubject редактируется и сохраняется, соответствующая запись также должна быть обновлена ​​в БД. Поэтому вы не можете избежать случая, когда запись не будет полностью обновлена. Я не говорю о всей таблице именно этой конкретной записи –

+0

Да :-). Мы говорим то же самое здесь ... просто разные варианты формулировок. Что такое команда sunspot, чтобы переиндексировать только эту запись (только этот объект, 'only this ticket_subject'), в отличие от повторной индексации всей таблицы? –