我在大礼包商务应用程序中使用黑子来处理solr。我已经为我的产品模型定义了它:
Spree::Product.class_eval do
searchable :auto_index => true, :auto_remove => true do
...
end
end
在索引时间,一切都进入Solr并正常工作。但是,当我尝试编辑产品时,所做的更改不会保存到Solr。例如,在产品标题中添加testtest
之类的唯一字词,然后搜索该关键字不会返回任何内容。当我重新索引整个数据库时,它可以工作。
在sunspot.yml
内部,我正在使用auto_commit_after_request: true
选项。
我跟踪了log/sunspot-solr-development.log
,其中记录了每个搜索。但是似乎编辑产品不会对Solr产生任何影响。我认为使用:auto_index => true
选项将触发保存到数据库(在生产中,我将使用Solr的autoCommit
功能)。
所以,我有点卡住了。我不知道黑子挂在保存块的哪个位置,还是背景中的RSolr?也许有人可以帮助我解决此问题。
编辑
[我刚刚看到,使用Sunspot时,模型类获得了index
和index!
之类的方法。奇怪的是,在控制台rails c
中调用Spree::Product.first.methods
时会列出此方法。但是,当我从产品控制器中获取更新方法时,就没有这种方法了。所以也许在初始化黑子时我遇到了一些问题。
FYI:上方(Spree::Product.class_eval do
)的代码在config/initializers/sunspot/sunspot_product.rb
下的初始化程序内部。
您应该使用solr_index和solr_index!控制器的方法。
几年过去了,我想为这个问题提供另一个选择。
您可以编辑solrconfig.xml并设置
autoSoftCommit
至您要编制索引的毫秒数。您可能不希望自己索引索引来重新发明整个轮子。
也请参阅此参考When should we apply Hard commit and Soft commit in SOLR?