Vous êtes ici Articles > Recherche contextuelle

 

Recherche contextuelle

Du coté MySQL
 
Koogar
Vu 2459 fois
Enregistré le 26 Aout 2010
  • Digg cet article sur digg.com
  • Bookmark cet article sur del.icio.us
  • Bookmark cet article sur Google
  • Bookmark cet article sur Yahoo
  • Ajoute Recherche contextuelle
  • Partage cet article sur Facebook
 
 
 
 

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.

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.

Commentaires
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.

Pour en savoir plus : http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html
 
Je pense que ce type de recherche ne fonctionne qu'avec MYISAM ce qui handicape fortement INNODB
Sauf erreur de ma part faire un moteur de recherche puissant est plus simple avec MYISAM que INNODB
Bref, j'attend vos commentaires
 
Pas d'erreur, 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
 
Un exemple existe-il pour réaliser cela, je suis très intéresser par la recherche full text mais je travail beaucoups avec innodb vu l'ampleur des tables et le nombre de transaction
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Quelques articles qui devraient vous intéresser