Recherche 'full text' à partir de MySQL 3.23.23
Par Auteur INTERNE, vendredi 14 septembre 2001 à 05:19 :: Lu sur le Web :: #586 :: rss
La version 3.23.23 de MySQL introduit les indexes de type FULLTEXT. Ils sont utilisés pour des recherches 'full text' mais uniquement sur des table de type MyISAM.
Il existe en l'occurrence 6 types pour les tables MySQL : BDB, HEAP, ISAM, InnoDB, MERGE, MYISAM.
Ce dernier donne la possibilité d'indexer des champs contenants des valeurs NULL, de type BLOB ou TEXT. C'est aussi le seul qui permet de créer des indexes FULLTEXT à partir de champs de type VARCHAR ou TEXT.
CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, titre VARCHAR(200), libelle TEXT, FULLTEXT (titre,libelle) ) TYPE=MyISAM;Le TYPE=MyISAM parait optionnel.
Après avoir rempli notre table de données, on peut réaliser un recherche FULLTEXT.
SELECT * FROM articles WHERE MATCH (titre,libelle) AGAINST ('intéressant');
La fonction MATCH() réalise une recherche en langage naturel d'une chaîne de caractères. La recherche retournera donc les articles qui contiennent le mot 'intéressant' aussi bien dans le champ titre que dans le champ libellé de notre article.Notez que parmis les résultats, on trouve aussi les enregistrements qui contiennent 'interessant'.
Il semblerait judicieux de déterminer si l'article résultant de la recherche est plus pertinent ou non par rapport aux autres. Il serait donc intéressant de pouvoir calculer un indice de pertinence.
SELECT id,MATCH (titre,libelle) AGAINST ('interessant') FROM articles;
Cette requete vous permet de voir la valeur renvoyé par la fonction MATCH(), que l'on appel indice de pertinence. Celui-ci correspond à la similarité entre le(s) mot(s) contenu dans les champs listés dans le MATCH et le(s) mot(s) présents dans la requête. Lorsque la fonction MATCH() est présente dans la clause WHERE, les résultats sont automatiquement triés par ordre décroissant d'indice de pertinence. Cet indice est un nombre décimal positif issu d'un calcul savant entre le nombre de mot similaires à ceux de la requête et le nombre total de mot dans l'enregistrement. Zéro indique qu'il n'y a aucune similarité.Afin d'obtenir nos résultats associés à la valeur de l'indice, voici une requête d'exemple.
SELECT id, body, MATCH (titre,libelle) AGAINST (
'utilisation de la recherche fulltext') AS score
FROM articles WHERE MATCH (titre,libelle) AGAINST
('utilisation de la recherche fulltext');
Je vous invite à prendre le temps de consulter l'excellent article publié sur Evolt.org. Il vous donnera un exemple et un code complet qui associe à la recherche FULLTEXT une recherche booléenne.Evolt.org : Boolean Fulltext Searching with PHP and MySQL







Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Vous pouvez soumettre un commentaire en remplissant le formulaire ci-dessous. Toutes les contributions font l'objet d'une étape de modération par notre équipe.
Le code HTML dans le commentaire sera affiché comme du texte, les adresses internet seront converties automatiquement.