Création d'un outil de recherche
en VB/SQL


Objectif...

L'objectif de ce TP est :

  • construire un outil de recherche comme on peut en voir couramment : dans les principaux moteurs de recherche, dans les magasins en ligne, dans certains logiciels (exemple : l'aide en ligne de Windows).
  • d'utiliser pour cela des requêtes SQL "concrètes" (telles qu'elles sont largement utilisées sur Internet et dans certains logiciels),
  • pour atteindre cet objectif, on va construire petit à petit des requêtes SQL de plus en plus sophistiquées, tellement sophistiquées qu'on va devoir les construire sous Visual Basic, grâce à ses fonctions de manipulation de chaînes de caractères.

Ce TP est transposable dans d'autres environnements de programmation, par exemple PHP + MySQL.

Durée : 4 heures.


Prérequis...

Les pré-requis nécessaire pour réaliser ce TP sont :

  • MS Access : savoir ce qu'est une base de données, une table, un champs. Savoir construire un formulaire et y associer du code en Visual Basic.
  • Visual Basic : savoir gérer les chaînes de caractères.
  • SQL : savoir écrire des requêtes simples (jointure + condition).

1
Préparation du projet.

Charger une base de données existante sous Access, qui contient (de préférence) beaucoup d'enregistrements, et qui ne soit pas monotable (pour pouvoir faire des jointures). A défaut, utilisez la base des films. En effet, au plus la table est complète, au plus l'outil de recherche se justifie. Par exemple, chez les disquaires sur Internet, on peut chercher un disque parmis des millions de références ! Comment faire sans un outil de recherche performant ?

Travail à faire :

2
Première recherche.

Ce type de recherche a déjà été fait lorsqu'on a fait l'atelier Access, c'est le plus simple. On vérifie si la chaîne saisie par l'utilisateur (dans l'exemple ci-contre : "basic") existe :

Travail à faire : réalisez cette requête en vous aidant des indications suivantes :

3
Deuxième recherche :
traiter plusieurs mots-clé.

Cette recherche, et les suivantes, viennent compléter la recherche précédente. Vous devrez donc, à chaque nouvelle recherche proposée, modifier votre procédure existante et non pas en créer une nouvelle.

On va maintenant apporter une première amélioration : si l'utilisateur entre plusieurs mots-clé séparés par des espaces, on ne va plus les considérer comme une seule chaîne de caractères contigüe, mais comme plusieurs mots à rechercher séparément. Dans l'exemple ci-contre, on ne recherche pas les films qui contiennent la chaîne "excalibur boorman", mais les films qui contiennent la chaîne excalibur d'une part, et la chaîne boorman d'autre part.

Par exemple, si la chaîne saisie par l'utilisateur est "excalibur boorman ", alors la requête que nous allons exécuter est (en gras, ce qui change par rapport à la requête précédente) :

L'objectif est de réaliser un algorithme qui construit cette requête, et ce quel que soit la chaîne saisie par l'utilisateur, et quel que soit le nombre de mots-clé saisis ! L'algorithme pour réaliser cette requête est le suivant :

SQL = "Select Numéro, Titre_Original & ' (' & Réalisateur & ')' from film where true"
Tant qu'il y a des espaces dans la chaîne recherchée (grâce à la fonction instr)
  Isoler le premier mot-clé (grâce à la fonction left)
  SQL = SQL & " and Titre_original & Titre_français & Réalisateur & Acteurs like ""*" & le_mot & "*"""
  Supprimer le premier mot de la chaîne des mots-clé (grâce à la fonction right)
Fin Tant Que
SQL = SQL & " and Titre_original & Titre_français & Réalisateur & Acteurs like ""*" & le_dernier_mot & "*"";"

Affectez ensuite cette requête à la source de données de la zone de liste, comme on l'a fait dans la première recherche*.

4
Troisème recherche :
différencier le 'et' et le 'ou'.

Lorsqu'un utilisateur entre plusieurs mots-clé pour un recherche, il y a plusieurs façons de les traiter :


Exemple de recherche sophistiqué, sur un site de vente aux enchères entre particuliers.

Travail à faire pour mettre en place la deuxième méthode :

  • Dans votre formulaire Access, ajoutez deux boutons d'option qui permettent à l'utilisateur de choisir si on va appliquer l'opérateur et (en anglais : and) ou l'opérateur ou (en anglais : or) dans la requête.
  • Remarque importante : pour que les boutons d'option soient excusifs, il faut les mettre dans un cadre (en anglais : frame).
  • Pour que l'utilisateur comprenne, vous n'afficherez pas "et / ou" mais "Tous les mots / Au moins un mot".
  • Modifier la recherche précédente (intitulée "deuxième recherche"), pour remplacer les and par des or le cas échéant.

 

5
Quatrième recherche :
utilisation des guillemets pour les mots-clé contigües.

Lors de la deuxième recherche, on a fait en sorte que les mots-clé saisis par l'utilisateur ne soient pas recherchés de façon contigüe (excalibur et boorman). Mais parfois, l'utilisateur voudra vraiment rechercher des mots contigüs (par exemple s'il recherche "lost world") ! Les moteurs de recherche proposent l'utilisation des guillemets pour forcer la recherche contigüe. Par exemple :

Travail à faire :

6
Cinquième recherche :
recherche limitée à certains champs.

Dans les librairies ou les disquaires sur Internet, on a la possibilité de préciser sur quels champs on effectue la recherche (titre, auteur, etc.) C'est ce que l'on va programmer maintenant.


Exemple sur Amazon.fr, "recherche détaillée"

Travail à faire :

7
Sixième recherche :
principe du scoring.

Le principe du scoring a été évoqué ci-dessus (3ème recherche, 3ème méthode) : il s'agit de trier les réponses en fonction de leur degré de pertinence par rapport à la liste de mots-clés saisie par l'utilisateur. Par exemple, si l'utilisateur donne comme mots-clé "gold great hit" :

Pour réaliser ce scoring :

Remarque : la recherche ne s'effectue que par rapport au titre du film. Si on avait voulu la faire également sur d'autres champs comme le nom des acteurs, cela devient très complexe, au point qu'on ne peut plus le faire avec une simple requête SQL, mais avec un RecordSet. Il faut en effet, pour chaque ligne, faire un traitement complexe qu'il est impossible à faire en SQL.

8
Liens.

Comme vous pourrez le voir sur les liens suivants, ce qu'on a fait ici est le minimum de la base du commencement de la recherche simplifiée. Les outils de recherche que vous pourrez voir sur les liens suivants surpassent largement le nôtre !

amazon.fr La page de recherche avancée des livres sur la librairie en ligne amazon.fr.
alapage.fr La page de recherche avancée des disques sur la librairie de France Télécom, alapage.fr.
fnac.fr La page de recherche avancée des vidéos sur le site de la FNAC.
altavista.fr La page de recherche avancée du moteur de recherche altavista.
google.fr La page de recherche avancée du moteur de recherche google.

Sébastien PASTORE.