维持Sunspot Solr指数的正确方法是什么?

时间:2013-04-12 18:22:10

标签: solr indexing mongoid sunspot

我对Solr索引机制感到困惑。也许有人可以对此有所了解。

因此,我们有2个rake命令:rake sunspot:solr:indexrake sunspot:solr:reindex

这是我的index任务的样子(我为Mongoid重写了它):

namespace :sunspot do
  namespace :solr do 
    desc "indexes searchable models"
    task :index => :environment do
      [Model1, Model2].each do |model|
        Sunspot.index!(model.all)
      end
    end
  end
end

据我了解,我对index的定义在每次运行时都有效地重新编制了集合索引。

我是对的吗? 它是否会覆盖以前的索引,还是必须使用reindex删除旧索引并创建新索引?

我使用的是宝石sunspot v2.0.0sunspot_mongo v1.0.1sunspot_solr v2.0.0

1 个答案:

答案 0 :(得分:8)

reindex任务只调用每个模型上的solr_reindex,该方法的来源如下(取自github)。

   # Completely rebuild the index for this class. First removes all 
   # instances from the index, then loads records and indexes them.
   #   
   # See #index for information on options, etc.
   #   
   def solr_reindex(options = {}) 
     solr_remove_all_from_index
     solr_index(options)
   end 

如果您查看solr_index的来源,评论会说该方法将“添加/更新Solr索引中的所有现有记录。”

因此,为了回答您的问题,reindex任务与index任务基本相同,只是reindex任务将首先删除现有索引。如果索引中包含您不知道的项目,则应致电reindex。如果您知道自己只是在索引中添加或更新项目,则可以只调用index并且不会因丢弃索引而遭受性能损失,然后从头开始重建。