IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Moteur de recherche


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    bum
    bum est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut Moteur de recherche
    Bonjour

    Je voudrais faire un moteur de recherche, j'ai suivi un petit tuto que j'ai trouvé sur le sujet.

    Ce n'est pas assez expliqué pour moi (je suis débutante) et je m'y perds un peu au niveau d'un script de remplissage de la base de données. Si j'ai bien compris il va chercher les mots-clés des métas et il les placent dans la base de données ?

    Voilà mon code pour le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?php
    echo "
    <p>\n
    <table BGCOLOR=\"#EFF2FB\" BORDER=\"0\"
    							CELLSPACING=\"0\"
    							CELLPADDING=\"1\"
    							WIDTH='100%'>\n
    <tr><td>\n
    <a name=\"#index\"><h2>Indexation du site en cours</h2></a>\n
    </td></tr>\n
    </table>\n
    <p>\n";
     
     
    mysql_connect("localhost", "root", "");
    mysql_select_db("nom_base");
     
     
    $query = "DELETE FROM web_search";
     
    mysql_query($query) or die ("Erreur de modification de la table");
     
    function ScanDir($Directory){
    $MyDirectory = opendir($Directory);
     
    	while($Entry = readdir($MyDirectory)) {
    		echo "<br>entry= $Entry<br>";
     
    		echo "repertoire= $Directory<br>";
     
    		echo "chemin= $Directory/$Entry<br>";
     
    		if(is_dir($Entry)&& $Entry != "." && $Entry != "..") {
    			echo "<b><font color=\"red\">$Entry</font>
    				  </b> est un repertoire<br>";
     
    			ScanDir("$Entry/$Directory");
     
    		}
    		else {
    		if (eregi(".php",$Entry)) {
    			$MetaTags = get_meta_tags($Directory."/".$Entry);
     
    			if ($MetaTags["robots"] == "all") {
    				$MetaKey = $MetaTags["keywords"];
     
    				$MetaKey = strtoupper($MetaKey);
     
    				echo "Meta($Directory/$Entry): $MetaKey
    \n";
     
    				$MetaTitre = $MetaTags["title"];
     
    				echo "Meta($Directory/$Entry): $MetaTitre
    \n";
     
    			$query = "INSERT INTO web_search (lien,keywords,titre)
    			VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")";
     
    			$mysql_result = mysql_query($query) or die ("Erreur
    			de modification de la table par la requete \"$query\"");
     
    			}
    		}
    		}
    	}
    closedir($MyDirectory);
     
    }
     
    $open_basedir=".";
     
    ScanDir(".");
     
    mysql_close();
     
    ?>
    Premièrement il me met cette erreur :
    Notice: Undefined index: robots in c:\programfiles\easyphp1-8\www\dossier\includes\script1.php on line 44
    Je sais qua ca signifie qu'une variable n'est pas déclarée mais comme je comprends pas trop le script je ne sais pas comment m'y prendre.
    En essayant plusieurs petits trucs je n'ai pas d'erreurs mais il ne se passe rien au niveau de la bdd.
    Le site internet est surtout composé d'includes, pour ne pas qu'ils aient tous les mêmes metas j'ai fais un include au niveau des metas sur l'index. C'est peut-être ce qui pose problème ?

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut
    Le probleme vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $MetaTags["robots"] == "all"
    .
    Ton get_meta_tags fonctionne comme suit :

    Exemple de balise meta

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <meta name="author" content="name">
    <meta name="keywords" content="php documentation">
    <meta name="DESCRIPTION" content="a php manual">
    <meta name="geo.position" content="49.33;-86.59">
    Résultat de get_meta_tags

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $tags = get_meta_tags('http://www.example.com/');// Notez que les clés sont en minuscule, et // le . a été remplacé par _ dans la clé  
    echo $tags['author'];       // nom  
    echo $tags['keywords'];     // documentation php   
    echo $tags['description'];  // un manuel PHP  
    echo $tags['geo_position']; // 49.33;-86.59
    ?>

    Or si tu n'as pas de balise meta avec le nom robots dans ton cas, le $MetaTags["robots"] n'existe pas, et donc robots est un index non defini!

  3. #3
    bum
    bum est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    J'avais mis le meta robots dans l'index mais pas dans les includes, je l'ai fais et ca marche mais bon... autant tout rentrer à la main car ca ne met pas de titre et le lien est celui des includes, enfin bref...

    Avec ce tuto le moteur marche si on tape un seul mot, comment fait-on pour traiter plusieurs mots avec espaces ? un petit tuto quelque part ?

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut
    Pas de tuto mais une idée que j'ai utiliser moi même pour un moteur de recherche dans une base :
    Tout ce joue dans ta requete. Tu récupère les mots clés saisis pas l'utilisateur, par exemple : "developpez forums". Ensuite tu l'explose par le séparateur " " (espace) et tu récupère ainsi xxx[0] => developpez, xxx[1] => forums. Ensuite tu découpe te raquete de recherche : select .... where WHERE keyword LIKE '%xxx[0]%' or WHERE keyword LIKE '%xxx[1]%' .
    C'est la grande ligne, faut paufiner un peu et chercher, mais c'est ca qui est interessant! Bon courage!

  5. #5
    bum
    bum est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    Ca m'a l'air compliqué tout ça...

    Sinon le moteur de recherche que j'ai actuellement ne se base que sur des mots-clés qu'on entre dans la bdd, je me vois mal entrer un nombre indeterminé de mots-clés, comment faire pour que le moteur de recherche ne se limite pas aux mots clés d'une table de la bdd mais recherche parmis tout le contenu du site ?? est-ce compliqué à faire ?? (sachant que le contenu est déjà rentré dans la bdd) faut-il revoir toute la conception de la bdd ?

  6. #6
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    Si tout ton contenu est déjà dans une base de donnée, ca n'est pas spécialement difficile.

    En gros, si toutes tes pages sont dans la table "page" et le champs "contenu", tu peux écrire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from page where contenu like '%letextequejecherche%'
    Et ca va te retourner toutes les pages ayant le contenu que tu recherches.

    Cette solution est facile, mais ne fonctionne que pour un seul mot.
    Maintennant, si tu veux chercher sur plusieurs mots, ta requete tu la construit pour arriver a quelque chose qui ressemble a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from page where contenu like '%mot1%' and contenu like '%mot2%'
    Et le tour est joué.

    Cette methode est la plus basique qui soit. Mais elle a comme problème d'être assez lente si ton site commence a être volumineux. Dans ce cas, tu peux aller un peu plus loin. A ce compte la, il faudra que tu indexes le contenu de ton site pour le retrouver plus vite, mais c'est une autre histoire, et c'est nettement plus complexe à réaliser (parsing du site, récuperation des mots, mise en table avec éventuellement une phrase "clef" représentative du contexte du mot (genre google), puis a la recherche, récupération des résultats, tri par pertinence...), mais c'est aussi nettement plus efficace.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo