8

我们在最新的项目中使用太阳黑子进行搜索。我们还使用设计并按如下方式索引我们的用户模型:

searchable do
  text :fname
  text :lname
  text :email
  text :description
  text :twitter_username
end

使用此设置,除非 solr 正在运行,否则用户甚至无法登录。这意味着在每次保存 User 模型时,都会与我们的 solr 服务器进行一些通信(重新索引?),即使所有可搜索字段都没有更改。它是否正确?

我们还有许多其他模型正在被太阳黑子索引,这些模型具有经常更新的不可搜索字段。似乎太阳黑子正在为所有这些更新重新编制索引。

有没有办法将 sunspot 配置为仅在可搜索字段更改时与 solr 交互?

4

1 回答 1

12

我假设您拥有最新版本的太阳黑子 gem。

  1. 每次模型更改时,太阳黑子都会重新索引。要调整此行为(请参阅可搜索的选项):

    可搜索 :ignore_attribute_changes_of => [ :average_rating, :permalink ] 做文本 :title end

    看一下源码:https ://github.com/outoftime/sunspot/blob/master/sunspot_rails/lib/sunspot/rails/searchable.rb

  2. 在第一次请求 solr 之前,您的站点应该仍然可以工作:

    • 全文搜索请求

    • 索引请求

    每次用户登录时,您可能都会对用户模型进行更新,因此会触发重新索引。

更多提示:

  • 实际上,花费大量时间的不是索引,而是提交命令;默认情况下,在每个 Web 请求结束时发出 commit 命令;这在生产环境中非常昂贵。我建议您将策略更改为X秒后自动提交

  • 如果您想要修补 sunspot,以便您的站点在 solr 服务器故障的情况下可以正常工作,我建议您查看这个 gem,它模拟了测试环境的服务器接口:sunspot_matchers

于 2011-05-18T16:56:56.737 回答