2011-07-17 6 views
1

J'étudie Sunspot comme une solution d'indexation possible pour notre projet. Il y a une chose, je ne trouve pas d'information à propos de: Comment les mises à jour des données sont-elles gérées? Si j'ai "setup" la classe que je souhaite indexer, comment le serveur solr est-il averti des changements à l'objet?Sunspot: Comment fonctionne l'indexation delta?

En outre, considérez le scénario suivant:

Je Création de classe qui Synonyme « has_many » et je construire mon index de cette façon:

Sunspot.setup(Artwork) 
    text :synonyms do 
    synonyms.map { |s| s.name } 
    end 
end 

Étant donnée une oeuvre « Mona Lisa » avec le synonymes "La Gioconda" et "Pas si grand sourire". Lorsque je mettrai à jour le dernier synonyme, serais-je averti et reconstruirait-il l'index pour "Mona Lisa"?

Répondre

2

Si vous utilisez Sunspot :: Rails et un modèle ActiveRecord, il existe un hook de cycle de vie qui mettra automatiquement à jour les données de l'enregistrement dans Solr à chaque fois que le modèle est enregistré. Cependant les regards comme ci-dessus vous utilisez pur Tache, auquel cas vous devrez créer votre propre crochet du cycle de vie, par exemple:

after_save { |artwork| Sunspot.index(artwork) } 

Vous aurez également besoin de votre propre logique de cycle de vie pour toute situation dans laquelle la mise à jour d'un modèle dépendant doit mettre à jour le document parent dans Solr (par exemple, les mises à jour directement dans les modèles Synonym ci-dessus).

+0

Merci beaucoup .. exactement ce que je voulais savoir! – moritz

0

Non, il n'existe aucune notification automatique avec Solr. Comme les synonymes sont stockés dans le fichier txt, vous devrez redémarrer le serveur solr puis réindexer. Le même cas avec n'importe quelle configuration de solr.

+0

Êtes-vous sûr de cela? Je demande parce que je lis ceci: http://www.vijedi.net/2010/ruby-full-text-search-performance-thinking-sphinx-vs-sunspot-solr/ où il est dit: "Les serveurs Solr peuvent être groupés et depuis qu'ils gèrent l'index, Sunspot peut automatiquement mettre à jour les index quand les objets du modèle changent.Il n'est pas nécessaire d'exécuter un travail cron pour réindexer les données ou configurer l'indexation delta comme avec Thinking Sphinx. " – moritz

+0

Lorsque vous modifiez le modèle, vous n'êtes pas obligé de réindexer manuellement. Je parle de réindexer quand la configuration du solr lui-même change comme quand vous changez d'analyseurs ou quand vous changez de synonymes etc. Espérons que c'est clair – leenasn

+0

Oui, je sais que je dois faire un réindex complet dans ces cas. Mais dans mon (ci-dessus) scénario, je ne change pas la configuration, juste les données. Donc, je me demande si solr sera averti (non seulement si les données du modèle changent mais si les données des associations changent). – moritz