Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comparatif moteur de recherche plein texte - Lucene, Sphinx, Postgresql, MySQL ?

C'est bien de voir que quelqu'un parle de Lucene - parce que je n'en ai aucune idée.

Sphinx, d'un autre côté, je le connais assez bien, alors voyons si je peux être d'une quelconque utilité.

  • Le classement par pertinence des résultats est la valeur par défaut. Vous pouvez configurer votre propre tri si vous le souhaitez et attribuer des pondérations plus élevées à des champs spécifiques.
  • La vitesse d'indexation est ultra-rapide, car elle communique directement avec la base de données. Toute lenteur proviendra de requêtes SQL complexes et de clés étrangères non indexées et d'autres problèmes de ce type. Je n'ai jamais remarqué de lenteur dans la recherche non plus.
  • Je suis un gars de Rails, donc je n'ai aucune idée de la facilité d'implémentation avec Django. Il existe cependant une API Python fournie avec la source Sphinx.
  • Le démon du service de recherche (searchd) utilise assez peu de mémoire - et vous pouvez définir des limites sur combien de mémoire le processus d'indexation utilise également.
  • L'évolutivité est le domaine dans lequel mes connaissances sont les plus sommaires, mais il est assez facile de copier des fichiers d'index sur plusieurs machines et d'exécuter plusieurs démons searchd. L'impression générale que j'ai des autres, cependant, est que c'est sacrément bon sous une charge élevée, donc le faire évoluer sur plusieurs machines n'est pas quelque chose qui doit être traité.
  • Il n'y a pas de prise en charge de "Voulez-vous dire", etc., bien que cela puisse être fait avec d'autres outils assez facilement. Sphinx utilise des dictionnaires pour les mots radicaux, donc "conduite" et "conduite" (par exemple) seraient considérés comme identiques dans les recherches.
  • Sphinx n'autorise pas les mises à jour d'index partielles pour les données de champ. L'approche courante consiste à maintenir un indice delta avec tous les changements récents et à le réindexer après chaque changement (et ces nouveaux résultats apparaissent en une seconde ou deux). En raison de la faible quantité de données, cela peut prendre quelques secondes. Cependant, vous devrez toujours réindexer régulièrement l'ensemble de données principal (bien que la fréquence dépende de la volatilité de vos données - tous les jours ? Toutes les heures ?). Les vitesses d'indexation rapides rendent tout cela assez indolore.

Je ne sais pas dans quelle mesure cela s'applique à votre situation, mais Evan Weaver a comparé quelques-unes des options de recherche Common Rails (Sphinx, Ferret (un portage de Lucene pour Ruby) et Solr), exécutant quelques benchmarks. Cela pourrait être utile, je suppose.

Je n'ai pas sondé les profondeurs de la recherche en texte intégral de MySQL, mais je sais qu'il n'est pas en concurrence en termes de vitesse ou de fonctionnalités avec Sphinx, Lucene ou Solr.