Easy-Micro


ESPACEMEMBRE SQL
Recherche SQL

Les requêtes de recherche

Les requêtes de recherche et de pertinence en SQL avec les mots clés FULLTEXT, MATCH et AGAINST

SQL FULLTEXT
Le mot clé FULLTEXT permet de créer un index de recherche intégrale. Les index de texte intégrale sont optimisés pour les recherches de mots ou d'expressions en langage courant. Il est par exemple, très pratique d'utiliser ce type d'index pour créer des moteurs de recherche pour sites Web. Les articles de votre site étant, dans ce cas, dans une base MySQL.

Attention, une requête de recherche ne marche que sur 4 lettres minimum et nécéssite de nombreux enregistrements pour fonctionner. La recherche est insensible à la casse.

Un index FULL TEXT se crée soit en même temps que la création de la table :
CREATE TABLE clients(
idclient tinyint PRIMARY KEY,
adresse VARCHAR(50),
...
FULLTEXT (adresse, nom)
);

Soit avec la commande CREATE FULLTEXT
CREATE FULLTEXT INDEX iadresse ON clients(adresse);

Pour effectuer une requête avec un tel index, nous utilisons le mot clé MATCH au lieu de LIKE. Le mot clé AGAINST() permet de péciser le ou les mots recherchés.

Syntaxe:
MATCH('nom_colonne') AGAINST ('mot_cle') AS 'valeur'

Afficher les noms de client qui ont les mots "loin de toi" dans leur adresses:
SELECT nom, prenom
FROM clients
WHERE MATCH(adresse) AGAINST('loin de toi')
LIMIT 0 , 30;

SQL MATCH
Lorsque le mot clé MATCH est utilisé avec la clause WHERE ou la clause ORDER BY, les enregistrements sont retournés dans un ordre de pertinence, le premier étant le plus pertinent. Il est possible de connaître l'indice de pertinence avec une requête comme celle-ci:

Même requête mais classée par pertinence (nouvelle colonne):
SELECT nom, prenom, MATCH(adresse) AGAINST('loin de toi') AS Pertinence
FROM clients
ORDER BY Pertinence DESC
LIMIT 0 , 30;

Si un mot apparaît dans de trops de nombreux enregistrements, il est ignoré car il pourrait fausser la pertinence. Par contre, le mot rare hérite d'une pertinence élevée.

Même requête mais avec uniquement les bonnes réponses
SELECT nom, prenom, MATCH(adresse) AGAINST('loin de toi') AS Pertinence
FROM clients
WHERE MATCH(adresse) AGAINST('loin de toi')
LIMIT 0 , 30;

Depuis la version 4 de MySQL, il est possible de faire des recherches en précisant des opérateurs booléens comme pour les moteurs de recherche.
Par exemple AGAINST('+mot1 +mot2' IN BOOLEAN MODE) cherchera les enregistrements où mot1 et mot2 apparaissent et AGAINST('+mot1 -mot2' IN BOOLEAN MODE) cherchera les enregistrements où mot1 apparaît mais sans mot2.

Recherche sur au moins un des trois mots (loin de toi):
SELECT nom, prenom, MATCH(adresse)
AGAINST('loin de toi' IN BOOLEAN MODE) AS Pertinence
FROM clients
ORDER BY Pertinence DESC
LIMIT 0 , 30;

Recherche sur le mot loin mais pas sur le mot pont (+ loin -pont) :
SELECT nom, prenom,
MATCH(adresse) AGAINST('+ loin -pont' IN BOOLEAN MODE) AS Pertinence
FROM clients
ORDER BY Pertinence DESC
LIMIT 0 , 30;

Rechercher une expression exacte (rue loin)
SELECT nom, prenom,
MATCH(adresse) AGAINST('+"rue loin"' IN BOOLEAN MODE) AS Pertinence
FROM clients
ORDER BY Pertinence DESC
LIMIT 0 , 30;


Suivez les aventures des skippers aquitains sur EasyVoile.com
Flux RSS Easy-Micro - Abonnez-vous Easy-Micro [ François Bisch ]
Jeudi 24 janvier 2019 - Semaine 04 - Saint François de Sales (Demain: Saint Manuel)
Aujourd'hui, c'est l'anniversaire de Daniel Auteuil (1950-69 ans), acteur français, de Nastassja Kinski (1961), actrice et mannequin allemande et de Muriel Moreno (1963), chanteuse française (du groupe Niagara). Autre 24 janvier: 2009 - Tempête Klaus sur le sud-ouest de la France (60% des forêts sont dévastées).
Haut de page Easy-Micro