sunspot_rails保存后不重新索引模型

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

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

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

正如Jason所提到的,您可以调用Sunspot.commit_if_dirty从您的客户端发出提交。

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

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

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

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

该索引仅反映调用Sunspot.commit后的更改。 运行rake sunspot:reindex时会自动发生这种情况rake sunspot:reindex

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

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

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

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