2017-10-19 139 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

感谢您的帮助,请看看这篇文章。 –