2017-10-19 144 views
0

我有一份產品報告,列出了所有已註冊的產品。 當我銷燬(刪除)de產品列表中的一個項目時,我需要將該項目從報告列表中刪除。 我確實使用Mysql的Sunspot Solr。 我嘗試以下方法:報告重新索引破損後花費太長時間

after_destroy { ProductsReport.reindex; Sunspot.commit } 

,因爲我的時間過長,執行產品巨大名單,但。 這是一種簡單或更有效的方式來做到這一點嗎?

順便說一下,我的系統是在Ruby on Rails中構建的。 在此先感謝。

+0

也許你可以使用後臺作業。看看:http://guides.rubyonrails.org/active_job_basics.html – Smek

+0

我已經在黎明每天使用一項工作,但當用戶更新他們的產品清單和產品庫存控制時,他們會抱怨關於該產品沒有被立即從報告中刪除。 每次完整的重新索引成本高,速度慢...所以即時通訊尋找方法來刪除屬於已刪除數據的索引部分。 –

回答

1

您可能很好地優化了此操作,但具體操作方法取決於您的數據模型和Solr設置。我還質疑每次刪除是否需要完整的重新索引。你能刪除已刪除記錄的Solr文件嗎?

無論如何,我建議使用排隊服務異步更新您的搜索羣集。 Rails應用的熱門選項包括DelayedJobResque

+0

重新編譯索引對我來說代價高昂,因此只能刪除屬於此產品的索引註冊表部分? –

+0

我對Solr並不是很熟悉,但有一點谷歌搜索表明這是可能的。 – hoffm

0

以前的答案是正確的 - 而不是重新編制索引,你應該只刪除文檔從Solr的問題,有沒有必要重新索引所有文件如果只有一個文件發生了變化。

在太陽黑子你可以做到這一點with Sunspot.remove(Doc)

+0

感謝您的幫助,請看看這篇文章。 –