TUTORIELS 

Cas pratique : un moteur de recherche en Php.
Troisième partie : Indexation récursive, origine des mots
Dans ce troisième volet de notre "moteur de recherche", nous améliorons l'indexation par un algorithme de parcours récursif des fichiers, et nous implémentons l'origine du mot traité dans notre table.  (25 janvier 2002)
 

Pages 1 | 2


La fonction d'indexation et le champ origine

Quelle est donc cette fonction...

indexation($file, $src);

...C'est tout simplement le coeur du script du dernier tutoriel que nous avons "transformé" en fonction. Rien de bien sorcier :

function indexation($nomfichier, $origine)
{
     $str_ini = join('', file($nomfichier));
     $contenu = strip_tags($str_ini);

     // -------- TRAITEMENTS PHP ---------

     // Insère les mots et leurs occurences...
     while (list ($key, $val) = each ($occurences))
     {
         $req="insert into moteur (mot, poids, origine, titre_page) values ('$key', $val,                     '$origine', 'titre_page')";
         $idreq=mysql_query($req);
     }
     // -------- TRAITEMENTS PHP ---------
}

Voilà résumés les changements à opérer sur le script de l'épisode précédent. Le premier paramètre passé à la fonction est tout simplement le nom du fichier à indexer, tandis que le second va servir à implémenter le champ "origine" de la table "moteur".
Initialement égal à 'origine', ce champ reçoit désormais la valeur '$origine'.

Au chapitre des modifications nous avons également sorti de la boucle d'indexation les lignes relatives à la connection à la base de données, inutile qu'elles soient répétées.

Enfin, la fonction de mise à jour du titre a elle aussi été modifiée, de deux manières :

// Mise à jour du titre
$titre_tmp = htmlspecialchars($regs[1], ENT_QUOTES);
$req_titre="update moteur set titre_page = '$titre_tmp' where origine = '$origine'";
$idreq_titre=mysql_query($req_titre);
if ($idreq_titre == 0)
{
     echo("erreur maj titre<br>");
     mysql_close($idconnect);
     exit;
}


Les expressions en gras sont celles qui ont été modifiées. Il nous fallait premièrement éviter que le script ne se plante sur un script contenant un caractère "simple quote" par exemple (nous tâchons d'améliorer notre script au fur et à mesure), c'était un oubli dans la version précédente.

Ne pas oublier également la condition "where" dans la mise à jour du titre !
Cette clause était inutile auparavant puisque nous traitions un seul fichier à la fois. Aujourd'hui, si nous ne précisons pas cette restriction lors de la mise à jour, le titre du dernier tutoriel indexé sera présent dans tous les champs de la base.

Voici notre script "moteur.php" mis à jour, ainsi que le jeu de test utilisé ici.
A titre indicatif l'indexation a pris environ 3mn pour un peu plus de 2000 champs insérés dans la table "moteur" sous windows 2000, le tout cadencé à 1Ghz.

Pages 1 | 2

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page