2010-10-10 8 views
3

J'ai un site qui utilise le schéma d'indexation principal/delta pour le sphinx. La principale est reconstruite tous les jours, le delta est reconstruit toutes les 5 minutes. Cela fonctionne bien pour l'indexation des éléments nouvellement soumis. Le problème est que les éléments doivent être supprimés de l'index aussi souvent qu'ils sont ajoutés, et généralement les éléments supprimés sont plus anciens, ils résident donc déjà dans l'index principal. Ainsi, après la suppression de l'élément, ils apparaissent toujours dans les résultats de la recherche jusqu'à 24 heures (jusqu'à 1 heure du matin lorsque la fonction principale est reconstruite).Comment supprimer des entrées effacées de l'index sphinx principal?

Comment puis-je résoudre ce problème?

+0

Vous devriez probablement supprimer la balise pensée-sphynx, comme la pensée-sphynx est un système de documentation pour Ruby . –

+0

Si tuer des listes était une solution, vous devez accepter la réponse à propos de l'utilisation des listes de destruction. Merci. –

+0

@chris - Penser Sphinx est un emballage Ruby pour Sphinx. – troelskn

Répondre

0

Sphinx a récemment introduit une fonctionnalité d'indexation en temps réel, dans laquelle vous pouvez ajouter, mettre à jour et supprimer des index à la volée. Cependant, il est seulement disponible en 1.10, et semble encore assez cru.

http://www.sphinxsearch.com/docs/current.html#rt-indexes

Sinon, vous pouvez complète réindexer plus souvent. Toutes les 24 heures semblent longues, si vous avez beaucoup de suppressions. En dernier recours, vous pouvez toujours vérifier dans votre application que les ID renvoyés existent effectivement, puis les filtrer.

+1

en fait kill_list était la solution au problème, sans utiliser 1.0 –

0

Une option consiste à définir un attribut dans l'index, puis à en modifier la valeur pour «ignorer» certains documents. Par exemple, mes index ont un attribut flag_ignore. Toutes les recherches sont filtrées, de sorte que seuls les documents avec flag_ignore = 0 sont appariés. Lorsqu'un document doit disparaître dès maintenant à partir de l'index, j'appelle Sphinx-> UpdateAttributes() et définissez la valeur sur 1, ce qui fera disparaître le document de toute recherche suivante.

Questions connexes