我对Solr索引机制感到困惑。也许有人可以对此有所了解。
因此,我们有2个rake命令:rake sunspot:solr:index
和rake 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.0
,sunspot_mongo v1.0.1
,sunspot_solr v2.0.0
答案 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
并且不会因丢弃索引而遭受性能损失,然后从头开始重建。