Lorsque vous faites une recherche FULLTEXT sur une chaîne de caractères, cette chaîne est découpée en mots. Est considéré
comme un mot : toute suite de caractères composée de lettres, chiffres, tirets bas _ et apostrophes '. Par conséquent, un mot
composé, comme "porte-clés" par exemple, sera considéré comme deux mots : "porte" et "clés".
Chacun de ces mots sera ensuite comparé avec les valeurs des colonnes sur lesquelles se fait la recherche. Si la colonne contient
un des mots recherchés, on considère alors qu'elle correspond à la recherche.
Lorsque MySQL compare la chaîne de caractères que vous lui avez donnée, et les valeurs dans votre table, il ne tient pas compte
de tous les mots qu'il rencontre. Les règles sont les suivantes :
les mots rencontrés dans au moins la moitié des lignes sont ignorés (règle des 50 % ) ;
les mots trop courts (moins de quatre lettres) sont ignorés ;
et les mots trop communs (en anglais, about, after, once, under, the…) ne sont également pas pris en compte.
Par conséquent, si vous voulez faire des recherches sur une table, il est nécessaire que cette table comporte au moins trois
lignes, sinon chacun des mots sera présent dans au moins la moitié des lignes et aucun ne sera pris en compte.
Il est possible de redéfinir la longueur minimale des mots pris en compte, ainsi que la liste des mots trop communs. Je n'entrerai
pas dans ces détails ici, vous trouverez ces informations dans la documentation officielle.
Les types de recherche
Il existe trois types de recherche FULLTEXT : la recherche naturelle, la recherche avec booléen, et enfin la recherche avec
extension de requête.
Recherche naturelle
Lorsque l'on fait une recherche naturelle, il suffit qu'un seul mot de la chaîne de caractères recherchée se retrouve dans une ligne
pour que celle-ci apparaisse dans les résultats. Attention cependant au fait que le mot exact doit se retrouver dans la valeur des
colonnes de l'index FULLTEXT examiné.
Voici la syntaxe utilisée pour faire une recherche FULLTEXT :
Code : SQL
SELECT *
-- Vous mettez évidemment
les colonnes que vous voulez.
FROM nom_table
WHERE MATCH(colonne1[, colonne2, ...])
-- La (ou les) colonne(s)
dans laquelle (ou lesquelles) on veut faire la recherche (index
FULLTEXT correspondant nécessaire).
AGAINST ('chaîne recherchée');
-- La chaîne de caractères
recherchée, entre guillemets bien sûr.
Si l'on veut préciser qu'on fait une recherche naturelle, on peut ajouter IN NATURAL LANGUAGE MODE. Ce n'est cependant
pas obligatoire puisque la recherche naturelle est le mode de recherche par défaut.
Code : SQL
SELECT *
FROM nom_table
WHERE MATCH(colonne1[, colonne2, ...])
AGAINST ('chaîne recherchée' IN NATURAL LANGUAGE MODE);
Premier exemple : on recherche "Terry" dans la colonne auteur de la table Livre .
Code : SQL
SELECT *
FROM Livre
WHERE MATCH(auteur)
Partie 2 : Index, jointures et sous-requêtes
81/414
www.openclassrooms.com
Précédent

- 81/413

Suivant