2009-10-31 8 views
2

Je viens d'installer django-sphinx, et il fonctionne à merveille. Je suis maintenant capable de rechercher mon modèle et obtenir des résultats étonnants. Le seul problème est que je dois construire l'index à la main en utilisant la commande indexer. Cela signifie que chaque fois que j'ajoute un nouveau contenu, je dois manuellement appuyer sur la ligne de commande pour reconstruire l'index de recherche. Ce n'est tout simplement pas acceptable.Comment reconstruire automatiquement l'index Sphinx sous django-sphinx?

je pourrais faire une tâche qui exécute automatiquement la commande indexeur tous si souvent, mais est loin d'être optimale. Les nouvelles données ne seront pas indexées jusqu'à ce que le cron s'exécute à nouveau. De plus, l'indexeur fonctionnera inutilement la plupart du temps car mon site n'a pas de données ajoutées très souvent.

Comment puis-je le configurer de sorte que l'indice Sphinx se reconstruire automatiquement chaque fois que des données sont ajoutées ou modifiées dans un modèle de django consultable?

Répondre

5

Il existe essentiellement deux stratégies principales pour la construction d'index de recherche:

  1. Indexer interne à un serveur de base de données, qui indexe à la volée sous forme d'enregistrements sont insérés ou supprimés.
  2. Indexeur externe à la base de données (qui peut être ou non un RDMS, c'est pourquoi je laisse le serveur de mots), qui indexe périodiquement.

La première stratégie présente l'avantage évident d'être plus proche du temps réel mais peut-être un énorme désavantage dans les performances. La plupart des serveurs de base de données avec indexeurs internes ont des problèmes de performance (ou des fonctionnalités manquantes), voir par exemple Jeff Atwood discutant des problèmes de performance dans SQL Server 2008 dans son article de blog sur adding a second server for stackoverflow.

La deuxième stratégie est pas en temps réel mais a généralement de meilleures performances, Malheureusement, cela signifie aussi, parce que ce n'est pas intégré, il doit être invoqué à l'extérieur d'une certaine manière.

Il est évident que vous avez pas le choix avec Sphinx, étant un indexeur externe. Vous devez appeler l'indexeur sphinx de cron ou un autre mécanisme de planification.

Pour accélérer l'indexation, exécutez-la souvent depuis cron. Si cela entraîne des problèmes de performances, vous devez implémenter un live-update strategy qui implique l'indexation de nouveaux enregistrements très fréquemment dans un index delta, puis la fusion périodique de l'index delta dans l'index principal. Cela serait fait à l'extérieur de Django, donc cela n'affecte rien en django-sphinx.

0

Les sons en haut à droite pour moi, bien que je vais mentionner que vous pourriez appeler l'indexeur de votre fonction de sauvegarde de l'objet.

Il obtiendriez probablement appelé beaucoup, mais cela pourrait fonctionner. Il suffit de l'appeler comme vous le feriez pour toute commande externe.

Questions connexes