我在rails上使用ruby來連接ElastiSearch。當我做update_all時,tyre(elasticsearch)沒有更新()
當我使用update_attributes
修改元素參數時,輪胎會自動更新索引以反映此更改。
但是,當我通過做update_all
來同時修改多個元素時,Tire不更新索引,並且它與我的數據庫不同步。
這是Tyre中的錯誤嗎?有沒有解決方法?
我在rails上使用ruby來連接ElastiSearch。當我做update_all時,tyre(elasticsearch)沒有更新()
當我使用update_attributes
修改元素參數時,輪胎會自動更新索引以反映此更改。
但是,當我通過做update_all
來同時修改多個元素時,Tire不更新索引,並且它與我的數據庫不同步。
這是Tyre中的錯誤嗎?有沒有解決方法?
按ActiveRecord#update_all documentation:
更新與給定的細節全部記錄它們是否匹配提供的一組條件,限制和訂單也可提供。該方法構造一個單獨的SQL UPDATE語句並將其直接發送到數據庫。它不會實例化相關模型,也不會觸發Active Record回調。
所以輪胎不更新任何東西,因爲回調不叫......
您必須要麼:
一)使用find_each
,並調用save
方法
b)使用update_all
,但然後做一個完整的重新索引。
我喜歡(a),因爲它看起來像你想要的功能涉及更新Rails對象,而不是直接的SQL UPDATE調用。除了重新編制索引之外,還可能有其他對象發生在對象上。 – 2012-04-13 14:39:47
你是否在github上爲Tire提交了一個問題? Karmi在回答問題和集思廣益尋找可能的解決方案方面非常出色。 – 2012-01-10 04:53:05