Шина (asticsearch) не обновляется, когда я выполняю update_all () - PullRequest
1 голос
/ 10 января 2012

Я использую Tire в ruby ​​на рельсах для соединения с ElastiSearch.

Когда я изменяю параметры элемента с помощью update_attributes, Tire автоматически обновляет индекс, чтобы отразить это изменение.

Однако, когда я изменяю много элементов одновременно, выполняя update_all, Tire не обновляет индекс, и он не синхронизируется с моей базой данных.

Является ли это ошибкой в ​​Tire?Есть ли обходной путь?

1 Ответ

2 голосов
/ 10 января 2012

Согласно ActiveRecord # update_all документация :

Обновляет все записи с указанием сведений, если они соответствуют набору предоставленных условий, также могут быть указаны пределы и порядок. Этот метод создает один оператор SQL UPDATE и отправляет его прямо в базу данных. Он не создает экземпляры задействованных моделей и не запускает обратные вызовы Active Record.

То есть Шина ничего не обновляет, потому что обратные вызовы не вызываются ...

Вы должны либо:

a) используйте find_each и вызовите метод save

b) используйте update_all, но затем выполните полное переиндексацию.

...