Le principe du moteur de recherche en SQL

Le retour du "like"

Vous le savez sans doute déjà, l'opérateur "like" de SQL permet de vérifier si un texte correspond entièrement, ou en partie, à un autre.

Ce qui est intéressant dans le cadre de notre besoin, c'est qu'il retourne 1 (vrai) s’il y a correspondance, ou 0 (false) si il n'y en a pas.

Dans l'exemple ci-dessous, vous remarquerez que la seconde colonne des résultats contient 1 si la description du produit contient le mot "rouge"

Requête SQL :

select description, description like '%rouge%' from produits

Résultats :

description description like '%rouge%'
Ce lot contient 4 surligneurs pointe large. Couleurs rose, jaune, vert et bleu 0
Bâton de colle permettant de fixer divers matériaux comme le papier et le carton 0
Double décimètre en plastique transparent. Idéal pour ranger dans une trousse 0
Ce stylo bille 4 couleurs (bleu, noir, <b>rouge</b> et vert) rétractable permet de gagner de la place dans votre trousse 1
Cette petite agrafeuse se glisse facilement dans votre sac et permet d'assembler des documents allant jusqu'à 15 feuilles 0
Cahier <b>rouge</b> à grands carreaux 17x22, 96 pages, papier 90g 1
3 chemises cartonnées, format 24x32cm. Couleurs : <b>rouge</b>, bleu, vert 1
Ce stylo plume argenté fonctionne avec des cartouches d'encre <b>rouge</b>s, noires ou bleues vendues séparément 1

Vive les additions

Comme nous l'avons vu juste au-dessus, l'opérateur "like" retourne des valeurs numériques (0 ou 1). Il est donc possible d'additionner le retour de plusieurs tests.

Dans l'exemple ci-dessous, la seconde colonne contient "2" (1+1) lorsque la description d'un produit contient "rouge" ET "bleu", 1 si le produit est "rouge" ou "bleu", et 0 si aucun des 2 mots n'est présent.

J'ai profité de cette requête pour ajouter un alias "score" qui nous facilitera la vie un peu plus tard.

Requête SQL :

select description, (description like '%rouge%')+(description like '%bleu%') as score from produits

Résultats :

description score
Ce lot contient 4 surligneurs pointe large. Couleurs rose, jaune, vert et <b>bleu</b> 1
Bâton de colle permettant de fixer divers matériaux comme le papier et le carton 0
Double décimètre en plastique transparent. Idéal pour ranger dans une trousse 0
Ce stylo bille 4 couleurs (<b>bleu</b>, noir, <b>rouge</b> et vert) rétractable permet de gagner de la place dans votre trousse 2
Cette petite agrafeuse se glisse facilement dans votre sac et permet d'assembler des documents allant jusqu'à 15 feuilles 0
Cahier <b>rouge</b> à grands carreaux 17x22, 96 pages, papier 90g 1
3 chemises cartonnées, format 24x32cm. Couleurs : <b>rouge</b>, <b>bleu</b>, vert 2
Ce stylo plume argenté fonctionne avec des cartouches d'encre <b>rouge</b>s, noires ou <b>bleu</b>es vendues séparément 2

⚠️ Notez bien la présence de parenthèses autour de chaque "like". Comme en mathématiques, elles permettent d'imposer des priorités dans les calculs. Ainsi, les "likes seront évalués avant que leurs retours (0 ou 1) soient additionnés.

Les meilleurs d'abord

Puisque nous avons maintenant une notion de "score" dans notre jeu de résultats, il suffit d'ajouter une instruction "order by score desc" à notre requête pour obtenir en premier les produits correspondants le mieux à notre demande.

Requête SQL :

select description, (description like '%rouge%')+(description like '%bleu%') as score
from produits
order by score desc

Résultats :

description score
Ce stylo bille 4 couleurs (bleu, noir, rouge et vert) rétractable permet de gagner de la place dans votre trousse 2
3 chemises cartonnées, format 24x32cm. Couleurs : rouge, bleu, vert 2
Ce stylo plume argenté fonctionne avec des cartouches d'encre rouges, noires ou bleues vendues séparément 2
Ce lot contient 4 surligneurs pointe large. Couleurs rose, jaune, vert et bleu 1
Cahier rouge à grands carreaux 17x22, 96 pages, papier 90g 1
Bâton de colle permettant de fixer divers matériaux comme le papier et le carton 0
Double décimètre en plastique transparent. Idéal pour ranger dans une trousse 0
Cette petite agrafeuse se glisse facilement dans votre sac et permet d'assembler des documents allant jusqu'à 15 feuilles 0

Only the best

Pour s'assurer que notre moteur de recherches ne retourne que des résultats avec au moins une correspondance, il est nécessaire d'ajouter une clause "where" reprenant nos critères de score séparés, cette fois, par l'opérateur "or".

Requête SQL :

select description, (description like '%rouge%')+(description like '%bleu%') as score
from produits
where (description like '%rouge%') or (description like '%bleu%')
order by score desc

Résultats :

description score
Ce stylo bille 4 couleurs (bleu, noir, rouge et vert) rétractable permet de gagner de la place dans votre trousse 2
3 chemises cartonnées, format 24x32cm. Couleurs : rouge, bleu, vert 2
Ce stylo plume argenté fonctionne avec des cartouches d'encre rouges, noires ou bleues vendues séparément 2
Ce lot contient 4 surligneurs pointe large. Couleurs rose, jaune, vert et bleu 1
Cahier rouge à grands carreaux 17x22, 96 pages, papier 90g 1

Et voilà !

Vous avez maintenant une bonne idée du principe, il nous reste à mettre cela en application

CHAPITRE PRECEDENT

Commentaires

Pour déposer un commentaire

Il n'y a pas encore de commentaire sur ce chapitre.