sunspot_rails保存后不重新索引模型

时间:2010-09-03 00:37:57

标签: ruby-on-rails solr sunspot sunspot-rails

我有一个模型,它可以部署延迟的作业来更新它的一些属性。该模型被宣布为“可搜索”......

searchable do
  text :content, :stored => true  
end

...我认为在保存后会重新索引。在测试中,似乎并非如此。如果我运行:rake sunspot:reindex,那么一切都按预期工作。可能导致这个问题的原因是什么?

3 个答案:

答案 0 :(得分:20)

正如Jason所说,您可以致电Sunspot.commit_if_dirty向您的客户发出提交。

从服务器配置方面,另一种方法是在autoCommit中设置solrconfig.xml属性,以便在对索引进行更改时自动发出提交。对于大多数网站来说,maxTime 60000毫秒(一分钟)就足够了。

使用autoCommit可能是生产应用程序中更明智的选择,因为大量提交很容易影响Solr服务器的性能。事实上,当您的网站开始获得大量更新时,使用Sunspot 禁用auto_commit_after_request option是一个很好的做法。

最后,autoCommit具有能够设置并忘记它的优势。

Websolr,我们的默认设置是忽略客户端发布的提交,转而使用autoCommit

答案 1 :(得分:7)

索引仅反映调用Sunspot.commit后的更改。运行rake sunspot:reindex时会自动执行此操作。

Sunspot的Rails插件还有一个auto_commit_after_request配置选项,可以在每个请求后调用Sunspot.commit_if_dirty,但这不会被后台进程触发。

最好的办法是在延迟工作的最后一件事之后致电Sunspot.commit_if_dirty

答案 2 :(得分:6)

我遇到了与你完全相同的问题 - 当我测试我的搜索功能时,太阳黑子将永远不会向solr发出提交。如果我手动调用Sunspot.com,一切正常。我使用auto_commit_after_request进行了调整,但默认情况下这是正确的,所以它不应该有所不同。

因此,经过一些调查后,我发现Sunspot不会自动发出提交,除非在Web请求的上下文中进行更改。如果您正在从测试或后台作业进行更改,则必须手动调用Sunspot.commit。