PHP INITIÉ - Recherche contextuelle

PHP INITIÉ - Recherche contextuelle

Vous avez des produits ou des articles à classer d'une manière intelligente? Allez vous réellement prendre le temps de classer tous vos produits par catégorie ou aimeriez vous que MySQL le fasse pour vous? Je pense sans vouloir m'avancer que cette recherche devrait vous séduire, de part le gain de temps, qui vous évitera des mots de têtes à classer des produits manuellement, et de part sa simplicité de mise en production.

PHP INITIÉ - Recherche contextuelle


Comment fonctionne la recherche contextuelle ?
Imaginer que vous êtes dans un magasin au rayon hifi, comme vous pouvez le voir tous les articles hifi sont sur le même rayon, mais pas forcement les rallonges électriques qui sont peut-être à l'autre bout du magasin, et vous en avez réellement besoin car la votre ne fonctionne plus, et sans elle votre chaine hifi électrique ne peut pas fonctionner. Si le magasin était équipé d'une recherche contextuelle, ups, d'un étalage contextuel devrais-je dire, vous auriez tout sous la main, mais ce n'est pas le cas. Vous allez voir que sur ce plan c'est l'internet qui prend le dessus grâce à MySQL, car avec une recherche contextuelle, cela devient possible !!

La mise en place :
La première étape consiste à modifier votre table SQL pour permettre au moteur SQL de lancer une recherche contextuelle. Vous devrez passer par un utilitaire de gestion de base de données, j'ai choisi de prendre le gestionnaire le plus connu qui n'est autre que phpMyAdmin.

Étape 1

Sélectionnez la table sur laquelle vous désirez lancer une recherche contextuelle, ensuite vous devrez choisir les champs de cette table sur laquelle la recherche va s'exécuter. Le plus courant est de lancer une recherche sur le titre et la description d'un article, pour avoir un maximum de pertinence sur le résultat.

Voici comment procédez :

1° Ouvrez phpMyAdmin
2° Sélectionner la table et allez sur la structure de celle-ci
3° En bas de votre écran vous allez créer une clé primaire
4° Donnez un nom à la clé primaire (peut importe le nom, choisissez celui qui vous convient le mieux)
4° Sélectionnez ensuite FULL TEXT comme type de clé
5° sélectionner maintenant le champ de votre choix ou la recherche va s'effectuer puis sauvegarder



Et voila c'est terminé ! Pour créer d'autre champ vous devrez passer par la modification, ensuite en ajoutant une autre clé vous verrez de nouveau les champs de votre table s'afficher, choisissez celui que vous voulez et sauvegardez de nouveau.

Étape 2

Une fois votre table prête, il ne vous reste plus qu'à construire la requête SQL. Cette étape est très simple à mettre en place. Si par exemple vous exposer un article sur votre site, vous devriez avoir le nom et la description de cet article ($titre $description), vous allez donc vouloir, comme nous l'avons cité plus haut, montrer des articles qui sont dans le même contexte.

Voici la requête pour une recherche contextuelle, faite sur 2 champs (titre, description)

SELECT *
FROM table
WHERE MATCH (titre, description)
AGAINST ('$titre $description');

Et voila !! Qui a dit que la recherche contextuelle était difficile à mettre en place ? Une fois cette opération terminé, vous verrez que la répéter ne vous prendra que quelques minutes de votre temps.

Attention : Il est impossible de créer des index FULLTEXT avec le moteur InnoDB. Il faut créer une table spéciale en InnoDB avec les champs de recherches et la même avec MyISAM qui lui accepte la recherche FULLTEXT, puis mettre à jour la table avec des triggers
Il y a aussi des options qui peuvent être utiles pour élargir et affiner les recherches :
"IN BOOLEAN MODE" qui permet, en associant les mots à rechercher de signes (+, -, >, <, ...), de faire des recherches plus fines.
"WITH QUERY EXPANSION" qui permet de faire des recherches avec des mots proches de ceux recherchés.