MySQL - Recherche Full-Text Booléenne

Bonjour, passionnés de bases de données en herbe ! Aujourd'hui, nous allons plonger dans le monde fascinant de la Recherche Full-Text Booléenne de MySQL. En tant que votre professeur de informatique bienveillant du coin, je suis excité de vous guider dans ce périple. Ne vous inquiétez pas si vous êtes nouveau dans la programmation – nous allons commencer par les bases et progresser pas à pas.Alors, prenez une tasse de café (ou de thé, si c'est votre truc), et c'est parti !

MySQL - Boolean Fulltext Search

Qu'est-ce que la Recherche Full-Text Booléenne de MySQL ?

Imaginez que vous cherchez un livre spécifique dans une bibliothèque massive. Plutôt que de vérifier manuellement chaque livre, ne serait-il pas génial de pouvoir dire au bibliothécaire : "Je veux un livre sur les dragons, mais pas sur les chevaliers, et il doit mentionner la magie" ? C'est essentiellement ce que fait la Recherche Full-Text Booléenne de MySQL pour votre base de données !

La Recherche Full-Text Booléenne de MySQL est une fonctionnalité puissante qui vous permet de chercher des mots ou des phrases spécifiques dans de grandes quantités de données textuelles. C'est comme avoir un bibliothécaire super-intelligent pour votre base de données qui peut rapidement trouver exactement ce que vous cherchez.

Commençons par un exemple simple :

CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
FULLTEXT(description)
);

INSERT INTO books (title, description) VALUES
('The Dragon\'s Quest', 'A magical adventure with dragons and wizards'),
('Knight\'s Tale', 'A story of brave knights and their quests'),
('Enchanted Forest', 'Magical creatures in a mysterious forest');

SELECT * FROM books
WHERE MATCH(description) AGAINST('dragons +magical -knights' IN BOOLEAN MODE);

Dans cet exemple, nous créons une table appelée 'books' et ajoutons quelques données échantillons. La dernière requête est où la magie opère. Elle recherche des livres qui :

  • Contiennent le mot 'dragons'
  • Doivent contenir le mot 'magical' (c'est ce que fait le '+')
  • Ne doivent pas contenir le mot 'knights' (c'est ce que fait le '-')

Le résultat ? Elle renverra 'The Dragon's Quest' car il correspond à tous ces critères.

Opérateurs de Recherche Full-Text Booléenne

Maintenant, examinons quelques-uns des opérateurs que nous pouvons utiliser dans la Recherche Full-Text Booléenne. Pensez à ceux-ci comme des instructions spéciales pour notre bibliothécaire de base de données :

Opérateur Description Exemple
+ Doit contenir ce mot +dragon
- Ne doit pas contenir ce mot -knight
> Augmente la pertinence >magic
< Diminue la pertinence <forest
* Jokers (correspond à n'importe quelle fin) drag*
" " Phrase exacte "magic wand"
() Groupement (+magic +wand) -broom

Voyons ces opérateurs en action :

SELECT * FROM books
WHERE MATCH(description) AGAINST('>magic +creatures -knights ("enchanted forest")' IN BOOLEAN MODE);

Cette requête recherche des livres qui :

  • Préférentiellement contiennent 'magic' (mais ce n'est pas obligatoire)
  • Doivent contenir 'creatures'
  • Ne doivent pas contenir 'knights'
  • Devraient avoir la phrase exacte "enchanted forest"

Devinez quel livre elle renverra ? C'est bien 'Enchanted Forest' !

Fonctionnalités de la Recherche Full-Text Booléenne de MySQL

Classement par Pertinence

Une des fonctionnalités les plus impressionnantes de la Recherche Full-Text Booléenne est le classement par pertinence. MySQL ne trouve pas seulement les résultats correspondants ; il les classe également en fonction de leur pertinence par rapport aux critères de recherche.

SELECT *, MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE) AS relevance
FROM books
WHERE MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE)
ORDER BY relevance DESC;

Cette requête renverra tous les livres contenant 'magic' ou 'dragons', classés par leur pertinence par rapport à ces termes.

Recherches avec Jokers

Rappelez-vous l'opérateur '*' que nous avons mentionné précédemment ? Il est incroyablement utile pour trouver des mots avec des suffixes différents :

SELECT * FROM books
WHERE MATCH(description) AGAINST('mag*' IN BOOLEAN MODE);

Cela trouvera des livres avec des mots comme 'magic', 'magical', 'mage', etc.

Recherches de Phrases

Lorsque vous souhaitez trouver une phrase exacte, utilisez des guillemets :

SELECT * FROM books
WHERE MATCH(description) AGAINST('"magical adventure"' IN BOOLEAN MODE);

Cela ne renverra que les livres avec la phrase exacte "magical adventure".

Recherche Full-Text Booléenne Utilisant un Programme Client

Bien que nous avons utilisé des requêtes SQL directement, dans des scénarios réels, vous utiliseriez souvent un programme client pour interagir avec votre base de données. Voici un exemple simple en Python utilisant la bibliothèque mysql-connector :

import mysql.connector

def search_books(keyword):
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)
cursor = conn.cursor()

query = "SELECT * FROM books WHERE MATCH(description) AGAINST(%s IN BOOLEAN MODE)"
cursor.execute(query, (keyword,))

results = cursor.fetchall()
for row in results:
print(f"Titre: {row[1]}, Description: {row[2]}")

cursor.close()
conn.close()

search_books('+magic -knights')

Cette fonction se connecte à votre base de données MySQL, effectue une Recherche Full-Text Booléenne, et imprime les résultats.

Et voilà, amis ! Nous avons voyagé à travers le royaume de la Recherche Full-Text Booléenne de MySQL, des concepts de base aux applications pratiques. Souvenez-vous, comme pour tout outil puissant, il faut de la pratique pour le maîtriser. Alors n'ayez pas peur d'expérimenter et de faire des erreurs – c'est ainsi que nous apprenons !

Avant de conclure, voici une petite histoire de mes jours d'enseignement : J'avais un élève qui avait du mal avec les recherches de bases de données. Il essayait sans cesse de trouver une aiguille dans une botte de foin en examinant chaque brin individuellement. Lorsque je lui ai présenté la Recherche Full-Text, ses yeux s'illuminèrent comme s'il venait de découvrir la magie. Et en un sens, il l'avait ! Car c'est ce que fait une bonne technologie – elle rend l'impossible magique.

Continuez à pratiquer, restez curieux, et bonne recherche !

Credits: Image by storyset