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。