Après l'indexation, une recherche en texte intégral est effectuée à l'aide des deux fonctions Match() et Against(), où Match() spécifie la colonne à rechercher et Against() spécifie l'expression de recherche à utiliser.
Ce qui suit est un exemple :
Entrée :
select note_text from productnotes where match(note_text) against('rabbit');
Sortie :
Analyse : Cette instruction SELECT récupère une seule colonne note_text. Grâce à la clause WHERE, une recherche en texte intégral est effectuée. Match(note_text) demande à MySQL de rechercher la colonne spécifiée, et Against('rabbit') spécifie le mot lapin comme texte de recherche. Puisque deux lignes contiennent le mot lapin , ces deux lignes sont renvoyées.
Utiliser la description complète de Match() La valeur transmise à Match() doit être la même que dans la définition FULLTEXT(). Si vous spécifiez plusieurs colonnes, elles doivent être répertoriées (et dans le bon ordre).
La recherche n'est pas sensible à la casse. La recherche en texte intégral n'est pas sensible à la casse, sauf si vous utilisez le mode BINAIRE.
La vérité est que la recherche peut maintenant être effectuée simplement avec la clause LIKE, comme suit :
Entrée :
select note_text from productnotes where note_text like '%rabbit';
Sortie :
Analyse : Cette instruction SELECT récupère également deux lignes, mais dans un ordre différent (bien que cela n'arrive pas toujours).
Aucune des deux instructions SELECT ci-dessus ne contient de clause ORDER BY. Ce dernier (en utilisant LIKE ) renvoie les données dans un ordre qui n'est pas particulièrement utile. Le premier (utilisant la recherche en texte intégral) renvoie des données triées en fonction de la correspondance du texte. Les deux lignes contiennent le mot lapin, mais la ligne contenant le mot lapin comme 3ème mot a un rang plus élevé que la ligne qui contient le 20ème mot. C'est important. Une partie importante de la recherche en texte intégral consiste à trier les résultats. Les lignes avec les rangs les plus élevés sont renvoyées en premier (puisqu'il s'agit probablement des lignes que vous souhaitez réellement).
Pour démontrer le fonctionnement du tri, regardez l'exemple suivant :
Entrée :
select note_text match(note_text) against('rabbit') as rank from productnotes;
Sortie :
Analyse : Ici, Match() et Against() sont utilisés dans le SELECT au lieu de la clause WHERE. Cela provoque le renvoi de toutes les lignes (puisqu'il n'y a pas de clause WHERE). Match() et Against() sont utilisés pour créer une colonne calculée (alias Rank ) qui contient la valeur de classement calculée par la recherche en texte intégral. Le classement est calculé par MySQL en fonction du nombre de mots dans la ligne, du nombre de mots uniques, du nombre total de
mots dans l'ensemble de l'index et du nombre de lignes contenant ce mot. Comme vous pouvez le constater, les lignes qui ne contiennent pas le mot lapin ont le rang 0 (et ne sont donc pas sélectionnées par la clause WHERE de l'exemple précédent). Les deux lignes qui contiennent le mot lapin ont chacune une valeur de rang, la ligne précédant le mot dans le texte ayant une valeur de rang plus élevée que la ligne après le mot.
Cet exemple permet d'illustrer comment une recherche en texte intégral exclut les lignes (exclut celles avec un rang de 0) et trie les résultats (tri par rang par ordre décroissant).
Tri de plusieurs termes de recherche Si plusieurs termes de recherche sont spécifiés, les lignes contenant le plus de mots correspondants auront une valeur de classement plus élevée que celles contenant moins de mots (ou une seule correspondance).
Comme vous pouvez le constater, la recherche en texte intégral offre des fonctionnalités qu'une simple recherche LIKE ne peut pas offrir. De plus, puisque les données sont indexées, les recherches en texte intégral sont assez rapides.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!