我有一个模型,它可以部署延迟的作业来更新它的一些属性。该模型被宣布为“可搜索”......
searchable do
text :content, :stored => true
end
...我认为在保存后会重新索引。在测试中,似乎并非如此。如果我运行:rake sunspot:reindex
,那么一切都按预期工作。可能导致这个问题的原因是什么?
答案 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。