sunspot_rails保存后不重新索引模型

New*_*ewy 17 solr ruby-on-rails sunspot sunspot-rails

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

searchable do
  text :content, :stored => true  
end
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*zny 20

正如杰森所提到的,您可以打电话Sunspot.commit_if_dirty给您的客户发出提交.

从服务器配置方面,另一种方法是将autoCommit属性设置为在solrconfig.xml对索引进行更改时自动发出提交.一个maxTime60000毫秒(1分),应该能满足大多数网站.

使用autoCommit可能是生产应用程序中更明智的选择,其中大量提交很容易影响Solr服务器的性能.事实上,它与太阳黑子一个很好的做法,禁止auto_commit_after_request option当你的网站开始得到更新,像样的数目.

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

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

  • 嗨nessur,不知道你想在这里做什么.sunspot_rails只不过是将Sunspot挂钩到Rails模型和控制器的轻型包装器.除此之外,这个问题归结为发布提交,您可以从"curl"发出所有客户事务. (4认同)
  • 问题实际上是关于'sunspot_rails`插件,而不是香草太阳黑子. (2认同)

Jas*_*red 7

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

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

你最好的选择是Sunspot.commit_if_dirty在延迟工作中作为最后一件事来打电话.

  • (重复自己)问题实际上是关于'sunspot_rails`插件,而不是香草太阳黑子. (2认同)

Jac*_*ius 6

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

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