Aide - personnaliser son moteur de recherche
Résolu
termi-zzz
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
phil232 Messages postés 607 Date d'inscription Statut Membre Dernière intervention -
phil232 Messages postés 607 Date d'inscription Statut Membre Dernière intervention -
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+
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:
- Aide - personnaliser son moteur de recherche
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Navigateurs
- Comment personnaliser sa sonnerie - Guide
- Copernic Desktop Search - Télécharger - Utilitaires
1 réponse
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.
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.