2013-04-12 4 views
7

Ich bin verwirrt über den Solr Indexierungsmechanismus. Vielleicht kann jemand etwas Licht darauf werfen.Wie können Indizes für Sunspot Solr korrekt verwaltet werden?

So haben wir 2 Rake Befehle: rake sunspot:solr:index und rake sunspot:solr:reindex

Hier ist, was meine index Aufgabe sieht aus wie (I overrode es für 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 

Soweit ich verstehe, meine Definition von index ist effektiv neu Indexierung der Sammlungen jedes Mal, wenn ich es ausführen.

Bin ich richtig? Überschreibt es den vorherigen Index oder muss ich reindex verwenden, um das alte zu löschen und die neuen Indizes zu erstellen?

Ich bin mit Edelsteine ​​, sunspot_mongo v1.0.1, sunspot_solr v2.0.0

Antwort

8

Die reindex Aufgabe ruft nur solr_reindex auf jedem der Modelle, und die Quelle für diese Methode ist unten (von Github genommen).

# 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 

Wenn Sie an der Quelle zu solr_index aussehen, sagen die Kommentare, dass die Methode wil „Hinzufügen/Update alle vorhandenen Einträge in der Solr-Index.“

Um Ihre Frage zu beantworten, ist die reindex Aufgabe im Wesentlichen die gleiche wie die index Aufgabe, außer dass die reindex Aufgabe zuerst den vorhandenen Index fallen lässt. Wenn Sie Artikel in Ihrem Index haben, von denen Sie wissen, dass sie nicht da sein sollten, rufen Sie reindex an. Wenn Sie wissen, dass Sie nur Elemente im Index hinzufügen oder aktualisieren, können Sie einfach index aufrufen und den Leistungseinbruch nicht erleiden, wenn Sie den Index löschen und dann neu erstellen.