Шина (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, но затем сделайте полный переиндекс.

Другие вопросы по тегам