2009-12-15 14 views
2

Comment configurer Django pour la recherche en texte intégral avec MySQL-InnoDB. Le moteur MySQL Myisam supporte la recherche en texte intégral mais j'utiliserai InnoDB. Est-ce la meilleure façon d'utiliser Sphinx? Si vous expliquez votre configuration, j'apprécierai. (Au fait, je me demande comment ça fonctionne avec postgresql aussi.)Recherche textuelle Django avec MySQL InnoDB

Répondre

4

Bien qu'il puisse être configuré pour communiquer automatiquement avec MySQL, Sphinx est vraiment un outil distinct pour MyISAM ou InnoDB. Il offre un bien meilleur traitement et de meilleures performances que la recherche fulltext simpliste dans MyISAM, mais bien sûr le prix est que l'interrogation avec des conditions basées sur la recherche et la base de données devient en même temps difficile. Vous pouvez le faire en utilisant SphinxSE (moteur de stockage) pour interroger et rejoindre via MySQL, mais ce n'est pas aussi flexible que de le garder dans le moteur de base de données et les jointures ne fonctionneront pas bien.

Sinon, vous pouvez adopter une approche hybride avec MyISAM et InnoDB. Mettez toutes vos données canoniques dans les tables InnoDB appropriées, et utilisez simplement MyISAM pour stocker fulltext searchbait. Pour les opérations normales, vous n'avez qu'à toucher le contenu InnoDB; Ce n'est que lorsque vous effectuez une recherche de texte intégral que vous devez rejoindre les tables MyISAM. Vous devez ensuite vous assurer de mettre à jour les tables MyISAM à partir de tout nouveau texte inséré dans les tables InnoDB après une transaction réussie. Alors que le manque de support des transactions dans MyISAM risque parfois de rendre les données incompatibles dans des conditions concurrentes ou erronées (un danger qui s'applique évidemment à la solution de stockage de texte intégral séparée comme Sphinx, Lucene et al), ce n'est pas un gros problème. réalité car c'est seulement le searchbait qui devient incohérent et non vos données réelles. Vous pouvez également saisir l'opportunité de traiter différemment le contenu de votre texte intégral, par exemple en appliquant un processus de traduction trivial, puisque MySQL ne l'implémente pas lui-même.

PostgreSQL possède son propre contenu en texte intégral basé sur l'opérateur @@. Ce n'est pas tout à fait à la vitesse de Sphinx, mais bien au-delà de MyISAM FULLTEXT (par exemple, stemming, dictionnaires, meilleure gestion des valeurs de pertinence), et vous pouvez toujours le combiner librement avec d'autres conditions de requête.

1

La dernière fois que j'étais sur le point de faire une telle chose, je voulais essayer django-sphinx, ce qui pourrait être aussi le choix pour vous.

2

mai vous voulez jeter un oeil à Haystack

Recherche ne doit pas être difficile. Haystack vous permet d'écrire votre code de recherche une fois et de choisir le moteur de recherche sur lequel vous voulez qu'il s'exécute. Avec une API familière qui devrait faire en sorte que tout Djangonaut se sente à la maison et une architecture qui vous permette d'échanger des choses selon vos besoins, c'est comme ça que la recherche devrait être.