PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 03-06-2010 06:28:28

yule
Membre
Inscription : 24-09-2009
Messages : 35

moteur de recherche qui retourne aucun résultat si plus de 1 mot clef

Bonjour,

Je fait un petit moteur pour une section de mon site, il fonctionne parfaitement si je ne recherche qu'un mot clef, dès qu'il y 2 mots clefs ou plus, il me retourne 0 résultat et je ne comprends pas pourquoi

Si je cherche le terme "cinéma" c'est ok
Si je cherche le terme "bleu" c'est ok

Si maintenant je cherche le terme "cinéma bleu" => 0 résultat grrrrr...

Je dois donc faire une erreur mais je sais pas ou et comment, si vous avez la bonté de regarder le code et me dire ce que j'ai fait de faux, c'est volontiers car la je patauge.. sad

D'avance merci
Yule


<?php
error_reporting(0);
 
 // nettoyage rapide
 $keywords = isset($_GET['search']) ? $_GET['search'] : '';
 $keywords = htmlspecialchars(chop($keywords));
 $keywords = str_replace(" ","+",chop($keywords));
 
 // tous dans un tableau
 $tablo = explode ('|',$keywords);
 
 // la requête
 $requete2 = "SELECT id, titre, description FROM $tablelexique WHERE
(titre LIKE '%$keywords%' OR description LIKE '%$keywords%') ORDER BY id ASC LIMIT 0,10"
;
 $result2 = mysql_query($requete2) OR die(mysql_error().' $requete2');
 
 $i=0;
 
 while($ligne = mysql_fetch_array($result2))
 {
 $id = $ligne["id"];
 $titre = $ligne["titre"];
 $description = $ligne["description"];
 
 //sortie du tableau
 $keywords = implode('|', $tablo);
 
 // coloration du mot clef
 $motifs='`^|\b(('.$keywords.')?)\b|$`si';
 $sorties='<font color="#398F48" size="3"><b><i>$1</i></b></font>';
 $titre = preg_replace($motifs,$sorties,$titre);
 $description = preg_replace($motifs,$sorties,$description); 
 
 // affichage du résultat
 echo"<p>» <a href='$nomsite0-$rssuri.html'><b>$titre</b></a><br>   
 $description<br></p>"
;
 $i++;
 }
?>

Ps : j'avais posté ce message sur un autre forum, mais j'ai pas du le faire au bon endroit oupsss, c'est pourquoi je pense qu'ici il est plus approprié

Hors ligne

#2 03-06-2010 07:48:05

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : moteur de recherche qui retourne aucun résultat si plus de 1 mot clef

$keywords = str_replace(" ","+",chop($keywords));
 // tous dans un tableau
 $tablo = explode ('|',$keywords);

D'un coté, tu rajoutes des " + ", de l'autre, tu explode avec des " | "

Une petite recherche t'aurait permis de trouver ce genre de chose :


if(trim(preg_replace("/[\s,]+/", '', $text_search)) != '') {
    $keywords = preg_split("/[\s,]+/", $text_search);
    $keywords = array_unique($keywords);
    $search .= ' AND (';
    $prefix = '';
        $ad_text_headline = a.ad_text . a.ad_headline;
    for($i = 0; $i < count($keywords); $i++) {
        $search .= $prefix."$ad_text_headline LIKE '%".$keywords[$i]."%' ";
        $prefix = 'OR ';}
        for($i = 0; $i < count($keywords); $i++) {
        $search .= $prefix."a.ad_text LIKE '%".$keywords[$i]."%' ";
        $prefix = 'OR ';}
    $search .= ') AND a.published = 1';}
else {$search .= ' AND a.published = 1';}
 

P.S : le code n'est pas là pour qu'il soit copié, mais pour que tu t'en inspires wink

Sinon, et c'est fait pour ça, tu pourrais regarder du côté des index de type FULLTEXT (je te laisse faire une recherche... ou pas ^^)

PS : Attention : la solution ... LIKE "%mot1%mot2%" ne retourne l'enregistrement que si mot1 est placé avant mot2  dans la chaîne.


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 03-06-2010 08:11:13

yule
Membre
Inscription : 24-09-2009
Messages : 35

Re : moteur de recherche qui retourne aucun résultat si plus de 1 mot clef

Hello,

Ah oui le coup du + et du | pas terrible effectivement...

Je vais zieuter tout ça merci

Pour le full Text, je l'utilise déjà sur mon moteur de recherche (http://www.cnous.ch/) depuis maintenant 5 ans, le full Text est bien pour des grosses bases de données... le gros soucis est la pertinence en mode full text qui est son point faible...

Dès que tu n'écris pas juste un terme recherché le résultat est à 0, certes tu peux y ajouter des boléans mais l'utilisateur ne s'amuse plus avec ça... le * , le - etc... et par conséquent je cherche a switcher mes résultats en full text qui ont une valeur de 0 pour passer sur du like et y afficher des résultats dit "moins pertinents" et je bute finalement sur ce qu'il y a de plus élémentaire, il est vrai que j'ai pris un code simple pour essayer de voir si mon idée pouvait être plausible et dans la précipitation j'ai pas tout analisé correctement...

A+
Yule

Dernière modification par yule (03-06-2010 08:11:38)

Hors ligne

#4 03-06-2010 09:04:29

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : moteur de recherche qui retourne aucun résultat si plus de 1 mot clef

Saluton,
Ben dis donc, cnous.ch, tu veux dire du CNOUS ?
Si c'est le cas, ton orthographe n'honore pas cette institution, et c'est un ancien du CROUS de Rennes qui te le dit.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 03-06-2010 09:28:52

yule
Membre
Inscription : 24-09-2009
Messages : 35

Re : moteur de recherche qui retourne aucun résultat si plus de 1 mot clef

Saluti,

Euh heureusement que j'ai un peu de culture ce qui n'est pas forcément toujours le cas dans le pays voisin.... j'avais pas compris de suite...

Non  c'est Cnous.ch en Suisse.... rien à voir avec ton CROUS qui est une institution.. mon site est un moteur de recherche tout simplement et qui peut se dire cénous /c'est nous etc... et ce n'est pas l'abréviation de quelque chose..

Mais je te l'accorde pour l'orthographe... disons et comme tu les sais il y a 4 langues en Suisse... j'en sais 2,5... et c'est pas toujours évident de switcher juste... et partant du principe que je n'ai pas fréquenté ce CROUS/CNOUS je m'en sors pas mal...rire

Cordialement
Yule

Dernière modification par yule (03-06-2010 09:29:48)

Hors ligne

#6 03-06-2010 12:04:09

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : moteur de recherche qui retourne aucun résultat si plus de 1 mot clef

Me voilà rassuré !;)


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums