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

Recherche générique dans la recherche en texte intégral MySQL

Malheureusement, vous ne pouvez pas le faire en utilisant un index de texte intégral MySQL. Vous ne pouvez pas récupérer '*nited states' instantanément à partir de l'index car les caractères de gauche constituent la partie la plus importante de l'index. Cependant, vous pouvez rechercher 'United Sta*' .

// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)

Le texte intégral de MySQL fonctionne mieux lors de la recherche de mots entiers dans des phrases - même cela peut parfois être nul. Sinon, je suggérerais d'utiliser un moteur de texte intégral externe comme Solr ou Sphinx . Je pense que Sphinx autorise les caractères génériques de préfixe et de suffixe, pas sûr des autres.

Vous pouvez revenir au LIKE de MySQL clause, mais encore une fois, en exécutant des requêtes comme LIKE '%nited states' ou LIKE '%nited Stat%' , souffrira également des performances, car il ne peut pas utiliser l'index sur les premiers caractères. 'United Sta%' et 'Unit%States' sont corrects car l'index peut être utilisé contre le premier groupe de caractères connus.

Une autre mise en garde assez importante concernant l'indexation en texte intégral de MySQL est la liste de mots vides et Paramètres de longueur minimale des mots . Par exemple, sur un environnement d'hébergement mutualisé, vous serez limité aux mots supérieurs ou égaux à 4 caractères. Ainsi, la recherche de "Goo" pour obtenir "Google" échouerait. La liste de mots vides interdit également les mots courants comme « et », « peut-être » et « dehors » - en fait, il y a 548 mots vides en tout ! Encore une fois, si vous n'utilisez pas l'hébergement partagé, ces paramètres sont relativement faciles à modifier, mais si vous l'êtes, vous serez ennuyé par certains des paramètres par défaut.