2013-04-12 14 views
7

私はSolrのインデックス機構について混乱しています。おそらく、誰かがそれに光を当てることができます。 、私の知る限り理解しSunspot Solrのインデックスを維持する正しい方法は何ですか?

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タスクが(私はMongoidのためにそれをオーバーライド)のようになりますrake sunspot:solr:indexrake sunspot:solr:reindex

そこで、我々は2つのすくいコマンドを持っていますindexは、コレクションを実行するたびに効果的にコレクションのインデックスを再作成しています。

私は正しいですか? 以前のインデックスを上書きするか、古いインデックスを削除して新しいインデックスを作成するためにreindexを使用する必要がありますか?

IはREINDEXタスクが単にモデルのそれぞれにsolr_reindexを呼び出し、そのメソッドのソースが(githubのから採取した)下で宝石、sunspot_mongo v1.0.1sunspot_solr v2.0.0

答えて

8

を使用しています。

# 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にソースを見れば、コメントは、メソッドWIL「は/更新Solrのインデックス内のすべての既存のレコードを追加します。」と言います

質問に答えるには、reindexのタスクはのタスクが最初に既存のインデックスを削除するという点を除いて、実質的にindexタスクと同じです。あなたが知っているべきであるあなたの索引の項目がそこにあるべきでないならば、reindexに電話するべきです。索引に項目を追加または更新するだけであれば、indexに電話して、索引を削除してから最初から再構築するとパフォーマンスが低下することはありません。

関連する問題