La recherche full text ou texte intégral, c’est quoi?
C’est une alternative puissante à la recherche d’une chaîne de caractères avec des fonctions classiques telle que LIKE.
Pour trouver une chaîne de caractères la recherche full text ne va pas parcourir l’ensemble des cellules, mais en ce basera sur l’index FULL TEXT de la table. Tous les mots les plus communs (poids faible) seront excluent de cette recherche. De base tous les mots inférieurs à trois caractères seront eux aussi excluent. Combinée à un outil d’analyse linguistique, la recherche full-text est également en mesure de mettre en corrélation les mots d’une même famille, par exemple “fruit”, “fruits” et “fruitier”. La recherche full text est très efficace pour trouver rapidement une chaine de caractères sur une grande quantité de données.
Ajouter un index FULLTEXT à une table.
Les indexes FULL TEXT sont utilisés avec les tables de type MyISAM (utilisation par defaut) . Ils peuvent être créés depuis des champs de type : CHAR, VARCHAR et TEXT soit au moment de la création de la table :
CREATE TABLE mytable (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title,
body,
FULL TEXT(title, body);
ou plus tard en modifiant la table :
ALTER TABLE mytable ADD FULL TEXT(title,body);
Notez qu’a tout moment il est possible de supprimer l’index FULL TEXT d’une table :
DROP INDEX monindex ON mytable;
Créer une requête SQL pour la recherche FULL TEXT
SELECT *
FROM mytable
WHERE MATCH(id, body) AGAINST(’barbapapa’);
explications :
lLa fonction MATCH() effectue une recherche full text sur la chaîne de cratères ’barbapapa’ donnée en paramètre à la fonction AGAINST(). Les colonnes utilisées par la fonction MATCH() doivent être identiques à celles utilisées dans l’index fulltext.
Nous venons de voir une utilisation classique de ce système de recherche.
Affiner cette recherche à l’aide des expressions booléennes avec la directive IN BOOLEAN MODE.
Par exemple si nous voulons exclure un mot lors d’une recherche :
SELECT *
FROM mytable
WHERE MATCH(id,body) AGAINST(’+barbapapa -rose’ IN BOOLEAN MODE);
explications :
la recherche portera sur le mot barbapapa (+barbapapa) et exclura le mot rose (-rose)
Il existe toute une suite d’opérateurs : +, -, *, etc.. je vous invite à jetter un oeil sur la doc officielle
Pour aller plus loin dans le paramétrage des indexes fulltext
Par défaut ce système de recherche ignore tous les mots inférieurs à 3 caractères. Il est possible de changer ce comportement en modifiant la valeur de la variable ‘ft_min_word_len’ qui se trouve dans le fichier my.cnf.
Pour visualiser la valeur de cette variable :
SHOW VARIABLES LIKE ‘%ft_min_word%’
modifiez la valeur de cette variable, sous linux le fichier se trouve communément dans /etc/mysql/my.cnf. Ensuite il faut recompiler les indexes de la table avec la commande SQL suivante :
REPAIR TABLE mytable
et enfin relancer le serveur mysql :
/etc/init.d/mysql restart
Voila déjà un joli tour d’horizon sur les requêtes full text. En espérant que cet article vous soit utile pour vos projets 