Я использую Searchkick для взаимодействия с API-интерфейсом эластичного поиска в моем приложении Rails, и он отлично работает почти во всех случаях, но проблема, с которой я сталкиваюсь, заключается в том, что у меня есть поле статуса в моей модели, и с помощью флажка «Выбрать все» пользователь может изменить статус всех записей, поэтому я обновляю свои данные, используя update_all
, который не запускает никакого обратного вызова, и данные переиндексации searchkick через обратный вызов after_commit
. и поскольку мои данные не получают reindexed
в Elastic Search таким образом, они дают те же результаты, что я должен сделать, является ли вызов Model.reindex
вручную хорошим вариантом ??
Данные переиндексации Rails Elastic Search после update_all
Ответы (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
Можно делать это локально, я пробовал, но не создаст ли это проблем на производстве, у нас более 50 000 записей на производстве, переиндексация 50 000 записей может занять приличное время??
- person Subhash Chandra; 30.05.2016
Да, это займет время, вы также можете вызвать этот переиндекс в фоновом режиме. Создать фоновое задание только для переиндексации. И назовите это в
afetr_action
.
- person Dipak Gupta; 30.05.2016
Вы можете сделать это и так
models.find_each { |m| m.update_attributes(params) }
Хотя это займет больше времени. Потому что обновление и переиндексация будут вызывать рекордное количество раз.
- person Dipak Gupta; 30.05.2016