17

我有一个模型,它部署了一个延迟的工作来更新它的一些属性。该模型被声明为“可搜索”...

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

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

4

3 回答 3

20

正如 Jason 所提到的,您可以致电Sunspot.commit_if_dirty以从您的客户那里发出提交。

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

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

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

Websolr,我们的默认设置是忽略客户端发出的提交,而支持autoCommit.

于 2010-12-13T02:01:19.610 回答
8

索引只会反映Sunspot.commit调用后的变化。这会在您运行时自动发生rake sunspot:reindex

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

你最好的选择是Sunspot.commit_if_dirty在你延迟的工作中做最后一件事。

于 2010-12-08T23:44:44.457 回答
6

我遇到了和你完全相同的问题——当我测试我的搜索功能时,sunspot 永远不会向 solr 提交提交。如果我手动调用 Sunspot.commit 一切正常。我摆弄了auto_commit_after_request,但默认情况下这是真的,所以它不应该有所不同。

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

于 2013-10-17T17:08:56.970 回答