2011-03-11 4 views
11

Lorsque l'utilisateur crée un document, j'ajoute la date à l'index solr. Chaque fois que les données changent comme modifier ou supprimer, dois-je réindexer l'ensemble des données? Que signifie réindex dans ce cas?Comment mettre à jour l'index de solr?

Quand je fais

$this->indexData(array(
     'id' => $pid, 
     'title' => $data['titel'] 
)); 

pour chaque document et faire $solr->addDocuments, il ne remplace simplement les données déjà existantes?

J'ai essayé de réindexer l'index entier sur ajouter/supprimer/modifier mais après avoir supprimé un certain champ, ses informations semblent toujours être dans l'index.

Des idées?

Répondre

23

Lorsque vous indexez un document sur solr, il écrase tout document existant avec le même <uniqueKey/> qui est généralement l'ID. Alors oui, il écrase les données existantes.

Lorsque vous voulez changer un seul champ d'un document, vous devrez réindexer le document entier, car solr ne supporte pas la mise à jour d'un champ seulement. Ainsi, lorsque vous supprimez un champ, vous devrez réindexer le document sans le champ. Cela écrase les données existantes. N'oubliez pas d'envoyer un commit à la fin.

Avec Solr 4, vous pouvez mettre à jour un seul champ d'un document. Voir Atomic_Updates

5

++ ci-dessus.

En outre, si vous avez un volume élevé de changements comme celui-ci alors il y a un problème potentiel:

Lorsque vous « MISE À JOUR » un document solr (comme morja dit) ce n'est pas une mise à jour « en place » . Ce qui se passe est que Solr maintient une table de recherche interne à ses documents et quand vous mettez à jour un document il doit garder une liste de redirection de sorte que quand un pointeur vers un document 'mis à jour' est frappé dans l'index inversé version de ce document.

C'est très bien si vous avez assez de mémoire, mais éventuellement Solr devra reconstruire les recherches quand il utilise cette mémoire en gardant une trace de tous les changements. Ceci (selon mon expérience) provoque des ralentissements inattendus et des optimisations indésirables.

Peut-être pas un problème pour vous mais c'était pour moi. (Mille + mises à jour par heure)

+1

Avec un tel volume de mises à jour, comment empêcher un utilisateur d'écraser les modifications d'un autre utilisateur? – gregm

+0

Comment avez-vous résolu votre problème? –

0

Le problème est peut-être que vous ne commettez pas de docs après la mise à jour (c'est une suppression et insertion), mais des commits trop fréquents pourraient déclencher l'optimisation alors soyez prudent.

Vous n'avez pas besoin de réindexer l'ensemble des données mais le document entier devra être reconstruit avec le document mis à jour.