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

La recherche en texte intégral est-elle la solution ?

Le problème avec la recherche de type '%keyword%' est qu'il n'y a aucun moyen de rechercher efficacement dans une table normale, même si vous créez un index sur cette colonne. Pensez à la façon dont vous regarderiez cette chaîne dans l'annuaire téléphonique. Il n'y a en fait aucun moyen de l'optimiser - vous devez analyser l'intégralité de l'annuaire téléphonique - et c'est ce que fait MySQL, une analyse complète de la table.

Si vous changez cette recherche en "mot clé%" et utilisez un index, vous pouvez obtenir une recherche très rapide. Il semble que ce n'est pas ce que vous voulez, cependant.

Donc, dans cet esprit, j'ai pas mal utilisé l'indexation/recherche de texte intégral, et voici quelques avantages et inconvénients :

Avantages

  • Très rapide
  • Renvoie les résultats triés par pertinence (par défaut, bien que vous puissiez utiliser n'importe quel tri)
  • Des mots vides peuvent être utilisés.

Inconvénients

  • Fonctionne uniquement avec les tables MyISAM
  • Les mots trop courts sont ignorés (le minimum par défaut est de 4 lettres)
  • Nécessite un SQL différent dans la clause where, vous devrez donc modifier les requêtes existantes.
  • Ne correspond pas à des chaînes partielles (par exemple, 'mot' ne correspond pas à 'mot clé', uniquement 'mot')

Voici une bonne documentation sur la recherche en texte intégral .

Une autre option consiste à utiliser un système de recherche tel que Sphinx . Il peut être extrêmement rapide et flexible. Il est optimisé pour la recherche et s'intègre bien à MySQL.