Шина (asticsearch) не обновляется, когда я выполняю update_all()
Я использую Tire в ruby на рельсах для соединения с ElastiSearch.
Когда я изменяю параметры элемента с update_attributes
, Tire автоматически обновляет индекс, чтобы отразить это изменение.
Тем не менее, когда я изменяю много элементов одновременно, делая update_all
, Tire не обновляет индекс, и он не синхронизируется с моей базой данных.
Это ошибка в Тире? Есть ли обходной путь?
1 ответ
Согласно документации ActiveRecord#update_all:
Обновляет все записи с указанием деталей, если они соответствуют набору предоставленных условий, ограничений и порядка. Этот метод создает один оператор SQL UPDATE и отправляет его прямо в базу данных. Он не создает экземпляры задействованных моделей и не запускает обратные вызовы Active Record.
Так что Tire ничего не обновляет, потому что обратные вызовы не вызываются...
Вы должны либо:
а) использовать find_each
и позвонить save
метод
б) использовать update_all
, но затем сделайте полный переиндекс.