【问题标题】:Tire (elasticsearch) is not updating when I do a update_all()当我执行 update_all() 时,轮胎(elasticsearch)没有更新
【发布时间】:2012-02-06 13:16:07
【问题描述】:

我在 ruby​​ on rails 中使用 Tire 来连接 ElastiSearch。

当我使用update_attributes 修改元素的参数时,Tire 会自动更新索引以反映此更改。

但是,当我通过 update_all 同时修改多个元素时,Tire 不会更新索引,并且它与我的数据库不同步。

这是轮胎中的错误吗?有解决办法吗?

【问题讨论】:

  • 你在 github 上提交过关于轮胎的问题吗? Karmi 非常擅长回应问题并集思广益以寻找可能的解决方案。

标签: ruby-on-rails elasticsearch tire


【解决方案1】:

根据ActiveRecord#update_all documentation

如果所有记录与提供的一组条件匹配,则更新所有记录并提供详细信息,还可以提供限制和顺序。此方法构造单个 SQL UPDATE 语句并将其直接发送到数据库。它不会实例化涉及的模型,也不会触发 Active Record 回调。

所以 Tire 不会更新任何东西,因为没有调用回调...

您必须:

a) 使用find_each 并调用save 方法

b) 使用update_all,然后进行完整的重新索引。

【讨论】:

  • 我喜欢 (a),因为它看起来像您想要的功能涉及更新 Rails 对象,而不是直接的 SQL UPDATE 调用。除了重新索引之外,您可能还希望在对象上发生其他事情。
猜你喜欢
  • 2013-09-26
  • 2013-07-23
  • 2013-02-28
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
相关资源
最近更新 更多