Данные переиндексации Rails Elastic Search после update_all

Я использую Searchkick для взаимодействия с API-интерфейсом эластичного поиска в моем приложении Rails, и он отлично работает почти во всех случаях, но проблема, с которой я сталкиваюсь, заключается в том, что у меня есть поле статуса в моей модели, и с помощью флажка «Выбрать все» пользователь может изменить статус всех записей, поэтому я обновляю свои данные, используя update_all, который не запускает никакого обратного вызова, и данные переиндексации searchkick через обратный вызов after_commit. и поскольку мои данные не получают reindexed в Elastic Search таким образом, они дают те же результаты, что я должен сделать, является ли вызов Model.reindex вручную хорошим вариантом ??


person Subhash Chandra    schedule 30.05.2016    source источник


Ответы (2)


Я действительно решил это, не переиндексируя все данные, что было бы действительно наивным решением, вместо этого мы также можем переиндексировать одну запись, как показано ниже.

product = Product.find 10
product.reindex
# or to reindex in the background
product.reindex_async
person Subhash Chandra    schedule 01.06.2016

Вы должны вызвать Model.reindex вручную. action_all создан для непосредственного внесения изменений на уровне БД. Дополнительные сведения см. здесь.

Вы можете создать after_action фильтр для переиндексации данных.

person Dipak Gupta    schedule 30.05.2016
comment
Можно делать это локально, я пробовал, но не создаст ли это проблем на производстве, у нас более 50 000 записей на производстве, переиндексация 50 000 записей может занять приличное время?? - person Subhash Chandra; 30.05.2016
comment
Да, это займет время, вы также можете вызвать этот переиндекс в фоновом режиме. Создать фоновое задание только для переиндексации. И назовите это в afetr_action. - person Dipak Gupta; 30.05.2016
comment
Вы можете сделать это и так models.find_each { |m| m.update_attributes(params) } Хотя это займет больше времени. Потому что обновление и переиндексация будут вызывать рекордное количество раз. - person Dipak Gupta; 30.05.2016