Aide - personnaliser son moteur de recherche

Résolu/Fermé
termi-zzz Messages postés 63 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009 - 21 déc. 2007 à 17:02
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 - 21 déc. 2007 à 18:52
Bonjour,

je suis en train de réaliser un moteur de recherche interne de mon site web avec base de donnée et table (id, titre, description, mots-clés, url, priorité, etc...) mais je rencontre un petit problème pour personnaliser son moteur de recherche interne.

Je souhaite pour une série de 3 requêtes, une pour rerchercher l'expression exacte, une pour rechercher les mots 1 par 1, une pour rechercher à l'intérieur de chaque mot s'il peut y'avoir des similitudes...Sauf qu'avec ce que j'ai créé, certes je n'ai pas de bugs, mais je n'ai pas les résultats souhaités, ça ne fonctionne pas comme ça devrait.

Est-ce que quelqu'un peut m'aider à peaufiner les requêtes pour qu'elle ressemble à celle qu'elle devrais être ???


1/ La première requête doit rechercher l'expression exacte entrée dans le formulaire. Exemple, recherche de "pizzas napolitaines", ça doit rechercher "pizzas napolitaines". En principe, ce que j'ai doit être bon ?

SELECT * from recherche where recherche_motscles LIKE '%$_POST[text]%' ORDER BY recherche_priority DESC

2/ La seconde requête doit rechercher les mots 1 par 1 entrés dans le formulaire. Exemple, pour une recherche de "pizzas napolitaines", ça doit rechercher "pizzas" OR "napolitaines". Donc ce que j'ai ci-dessous n'ai pas bon, mais comment résoudre ça ? Que faire pour que ça corresponde à la bonne requête ? Découper $i ? Est-ce suffisant ?

$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if(strlen($array_chaine[$i])>3){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles = '$array_chaine[$i]'";
}
}
$query.= " ORDER BY recherche_priority DESC ";


3/ La troisième requête doit rechercher entre les mots, les découper pour mieux les analysés. Exemple, pour une recherche de "pizzas napolitaines", ça doit rechercher tous les mots qui commence par "pi" ou "piz" ou "pizz" et pareil pour "nap" ou "napo" etc... etc... Quelque chose de similaire... J'ai au final ceci, mais est-ce vraiment le plus pertinant pour correspondre une fois encore à la requête demandée ??? Ou est-ce que ça n'a pas vraiment de rapport ?

$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if(strlen($array_chaine[$i])>3){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles LIKE '%$array_chaine[$i]%'";
}
}
$query.= " ORDER BY recherche_priority DESC ";


Voilà, si quelqu'un peut m'aider à mieux développer tout ça, faire un truc bien précis, ce serait franchement sympa... Merci d'avance!

a+
A voir également:

1 réponse

phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
21 déc. 2007 à 18:52
1. Non, c'est pas optimale --> "SELECT * from recherche where recherche_motscles = '$_POST[text]' ORDER BY recherche_priority DESC"
2. C'est bon
3. Le LIKE fonctionne dans l'autres sense : si t'as tapé "piz" le LIKE '%piz%' trouve tous les mots qui contiennent "piz" mais il fait pas ce que tu demandes. Pour resoudre ton pb il va falloir taper un peu, car tu dois faire

SELECT * from recherche where recherche_motscles LIKE 'p%' -- recherche tous les enregistrements qui commencent avec p
SELECT * from recherche where recherche_motscles LIKE 'pi%'
SELECT * from recherche where recherche_motscles LIKE 'piz%'
etc.
0