2013-04-12 19 views
7

Jestem zdezorientowany mechanizmem indeksowania Solr. Być może ktoś może rzucić trochę światła na to.Jaki jest poprawny sposób utrzymywania indeksów dla Sunspot Solr?

Więc mamy 2 polecenia Zgrabiarka: rake sunspot:solr:index i rake sunspot:solr:reindex

Oto co moja index zadanie wygląda (I overrode go 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 

O ile rozumiem, moja definicja index skutecznie reindeksuje kolekcje za każdym razem, gdy go uruchomię.

Mam rację? Czy nadpisuje poprzedni indeks, czy też trzeba użyć reindex, aby usunąć stare i utworzyć nowe indeksy?

Używam perełki , sunspot_mongo v1.0.1, sunspot_solr v2.0.0

Odpowiedz

8

Zadaniem REINDEX po prostu wywołuje solr_reindex na każdym z modeli, a źródłem tej metody jest poniżej (zaczerpnięte z 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 

Jeśli spojrzeć na źródła do solr_index, komentarze powiedzieć, że metoda wil „Dodaj/aktualizuj wszystkie istniejące rekordy indeksu Solr.”

Aby odpowiedzieć na Twoje pytanie, zadanie reindex jest zasadniczo takie samo jak zadanie index, z tym że zadanie reindex najpierw usunie istniejący indeks. Jeśli masz pozycje w indeksie, o których wiesz, że nie powinno ich tam być, zadzwoń pod numer reindex. Jeśli wiesz, że tylko dodajesz lub aktualizujesz elementy w indeksie, możesz po prostu zadzwonić pod numer index i nie ucierpisz z powodu spadku wydajności indeksu, a następnie odbudujesz go od początku.

Powiązane problemy