2010-09-03 14 views
17

Mam model, który wdraża opóźnione zadanie, które aktualizuje niektóre z jego atrybutów. Ten model jest zadeklarowany jako "możliwy do wyszukania" ...sunspot_rails nie ponownie indeksuje modelu po zapisaniu

searchable do 
    text :content, :stored => true 
end 

... który według mnie mógł ponownie zindeksować po zapisie. Podczas testów nie wydaje się, aby tak było. Jeśli uruchomię: rake sunspot:reindex, wszystko działa zgodnie z oczekiwaniami. Co może być przyczyną tego problemu?

+0

Czy możesz dodać lepsze słowa kluczowe do tego pytania, aby uzyskać lepszy zasięg? – Danny

+0

Nie sądzę, że to pytanie jest bardzo dobrze sformułowane, a także nie są to rozwiązania. Po pierwsze, użytkownik oczywiście używa "plam słonecznych", a nie tylko "plam słonecznych". Przez dwa, Odpowiedzi sugerowały omawianie rzeczy, które są dyskusyjne z powodu domyślnych ustawień plam słonecznych sunspot_rails. – nessur

+0

Jestem także zainteresowany testem rspec dla zatwierdzeń modelu, aby upewnić się, że działa. –

Odpowiedz

5

Indeks odzwierciedla tylko zmiany po wywołaniu Sunspot.commit. Dzieje się to automatycznie po uruchomieniu rake sunspot:reindex.

Wtyczka Sunspot's Rails ma również opcję konfiguracyjną auto_commit_after_request, która po każdym żądaniu wywoła Sunspot.commit_if_dirty, ale proces ten nie zostanie uruchomiony przez procesy działające w tle.

Najlepiej jest zadzwonić pod numer Sunspot.commit_if_dirty, ponieważ jest to ostatnia czynność opóźnienia.

+2

(powtórzę sobie) Pytanie dotyczy właśnie wtyczki "sunspot_rails", a nie waniliowej plamy słonecznej. – nessur

20

Jak wspomniał Jason, możesz zadzwonić pod numer Sunspot.commit_if_dirty, aby wydać polecenie od klienta.

Po stronie konfiguracji serwera, innym podejściem byłoby ustawienie właściwości autoCommit w twoim solrconfig.xml w celu automatycznego wydawania zatwierdzeń po wprowadzeniu zmian w indeksie. A maxTime z 60000 ms (jedna minuta) powinno wystarczyć dla większości witryn.

Jest to prawdopodobnie najrozsądniejszy wybór w aplikacjach produkcyjnych, w których duża liczba zatwierdzeń może łatwo wpłynąć na wydajność serwera Solr. Tak naprawdę dobrą praktyką z Sunspot jest wyłączenie jego auto_commit_after_request option, gdy witryna zacznie otrzymywać przyzwoitą ilość aktualizacji.

Wreszcie, autoCommit ma tę zaletę, że jest w stanie go ustawić i zapomnieć.

Przy domyślnej wartości Websolr ignorujemy wyemitowane przez klienta zatwierdzenia na rzecz autoCommit.

+2

pytanie dotyczy właśnie wtyczki 'sunspot_rails', a nie waniliowej plamy słonecznej. – nessur

+4

Cześć nessur, nie jestem pewien, co chciałbyś tutaj zrobić.sunspot_rails to niewiele więcej niż lekkie opakowanie do zawieszenia Sunspota w modele Rails i kontrolery. Poza tym to pytanie sprowadza się do wystawiania commitów, które możesz wydać z 'curl' dla wszystkich spraw klienta. –

+0

Pytanie dotyczy funkcji "automatycznego zatwierdzania", a to bardzo "lekkie opakowanie" dodaje do podstawowej funkcjonalności Sunspotów, więc jest to zbyt ważne, jakie klejnoty zainstalował użytkownik. Nieudokumentowane funkcje sprawiają, że świat się kręci, a przeciętny nowicjusz może zaintrygować się tym, że sunsport_rails instaluje hak kontrolera, który domyślnie zatwierdza wszelkie oczekujące zmiany w indeksie solr. – nessur

6

Miałem dokładnie taki sam problem jak ty - kiedy testowałem moją funkcję wyszukiwania, plamka słoneczna nigdy nie wydałaby zatwierdzenia dla solr. Jeśli ręcznie zadzwonię do Sunspot.commit wszystko działa. Zmieszałem się z auto_commit_after_request, ale domyślnie jest to prawda, więc nie powinno być inaczej.

Po dalszych badaniach stwierdziłem, że plamka słoneczna nie będzie automatycznie zatwierdzać, chyba że zmiana zostanie wprowadzona w kontekście żądania internetowego. Jeśli robisz zmianę z testu lub pracy w tle, musisz zadzwonić do Sunspot.commit ręcznie.

Powiązane problemy