Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1560 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu]Moteur de recherche basique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]Moteur de recherche basique

n°1157792
kray
Bad show?
Posté le 23-07-2005 à 10:42:42  profilanswer
 

Bonzour,
 
je cherche depuis pas mal de temps un peu partout sur le net comment faire un "moteur de recherche" basique en PHP. Et je trouve rien d'intéressant pour moi.
Ce que je veux faire c'est rechercher dans une DB par MotClé uniquement en AND.
 
Par exemple la requete est "jeux videos", je veux qu'il affiche d'abord les resultats avec "jeux videos" puis les resultats avec "jeux" et "videos" pas forcément cote a cote  
Jusqu'a present ce que je fais c'est

Code :
  1. mysql_query("SELECT * FROM Table WHERE Description LIKE '%".$MotCles."%'" );


 
Donc ca ca me sort les "jeux videos".
Maintenant pour les "jeux" et "video" pas cote a cote je vois pas d'idée facile et j'ai pas trouvé de fonction qui le ferait d'office.
Ca doit etre archi classique puisque beaucoup de moteur de recherche de forum sont comme ca, mais leur codes sources sont un peu trop compliqué encore pour moi.
merci


Message édité par kray le 25-07-2005 à 11:28:59
mood
Publicité
Posté le 23-07-2005 à 10:42:42  profilanswer
 

n°1157803
Profil sup​primé
Posté le 23-07-2005 à 11:06:38  answer
 

Et si tu essayait d'analyser ton champ de recherche avant de l'injecter dans ta requete sql ??
 
ensuite, si tu fait un strcmp( ) entre ta description et tes mots clefs, tu aura un debut de pertinence des requete...
 
Après, il faut encore supprimer les mots de moins de 3 lettres dans ta desc pour ameliorer la pertinence... etc...
 
Enfin, ce ne sont que des idées comme ca

n°1157823
esox_ch
Posté le 23-07-2005 à 11:49:48  profilanswer
 

Et passer tes champs en fulltext pour eliminer le besoin de faire un LIKE %$qqch% qui est catastrophique du point de vue resources


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1157829
kray
Bad show?
Posté le 23-07-2005 à 12:19:12  profilanswer
 

Citation :

Et si tu essayait d'analyser ton champ de recherche avant de l'injecter dans ta requete sql ??


 
C'est a dire? Car dans mon post précédent j'ai mis l'idée mais sinon je verifie si les magic quote sont activée ou pas et je fais en fonction de ca un mysql_real_escape_string.
Le problème c'est que pour faire le strcmp() va falloir que j'extraie chaque description de la DB,non ? Et si c'est le cas j'ai peur qu'au niveau res ca suive pas. Mais je vais essayer de mieux comprednre ton idée car c'est vrai que je vais etre obligé d'extraire de la DB et d'ensuite analyser à un moment ou un autre.
 

Citation :

Et passer tes champs en fulltext pour eliminer le besoin de faire un LIKE %$qqch% qui est catastrophique du point de vue resources


 
C'est quoi du fulltext?(shame on me).

n°1157834
Profil sup​primé
Posté le 23-07-2005 à 12:31:00  answer
 

quand je disait analyser, je voulait dire recuperer, le champ, le passer à la moulinette pour le separer en mots... chercher des chaines AND etc... pour ensuite faire une requete bien adaptée à ta recherche...

n°1157855
esox_ch
Posté le 23-07-2005 à 13:01:58  profilanswer
 

kray a écrit :


Citation :

Et passer tes champs en fulltext pour eliminer le besoin de faire un LIKE %$qqch% qui est catastrophique du point de vue resources


 
C'est quoi du fulltext?(shame on me).


 
 
va voir sur le site de mysql, leur réponse sera bien plus complete que la mienne :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1157957
kray
Bad show?
Posté le 23-07-2005 à 16:58:38  profilanswer
 

Ok merci je suis en train de voir ca. Ca a l'air de correspondre a ce que je cherche, meme si c'est un peu obscur leur documentation online.[EDIT]D'ailleur si quelqu'un connait un bon tutoriel sur la full text search :whistle: [/edit]
Si vous avez d'autres idées proposez quand meme! ;-)


Message édité par kray le 23-07-2005 à 17:15:54
n°1158312
kray
Bad show?
Posté le 24-07-2005 à 14:06:58  profilanswer
 

En fait je viens de trouver un très bon tutorialsue la recherche full text.  
Seulement il y a deux chosed que je n'arrive pas a faire avec ces requetes mySQL: -je n'arrive pas à intégrer COUNT(plus rapide que mysql_num_rows il me semble)
-je n'arrive à utiliser LIMIT.  
 
[EDIT]
Par exemple

Code :
  1. $requete= mysql_query("SELECT COUNT(*) Titre, Description,
  2.                MATCH(Titre, Description)
  3.                AGAINST ('$searchstring') AS score FROM ListObj
  4.                WHERE MATCH(Titre, Description)
  5.                AGAINST ('$searchstring') ORDER BY score DESC" ) or die(mysql_error());


ne marche pas (sans le COUNT(*) ca marche)
 
[/EDIT]
 
Car ce que je voudrais faire c'est afficher les resultats de la recherche 10 par 10 avec des liens vers les resultats suivants.
Donc est-ce quand mem possible d'utiliser COUNT et LIMIT ou dois je faire mysql_num_rows et ruser(ce qui lire toutes la table pour chaque requete au lieude  lire dix elements a chaque fois)


Message édité par kray le 24-07-2005 à 17:42:56
n°1158589
Profil sup​primé
Posté le 24-07-2005 à 23:36:12  answer
 

Si tu enleve Titre, Description, ca marchera mieux... pour le count...

n°1158799
kray
Bad show?
Posté le 25-07-2005 à 10:50:16  profilanswer
 

Oui c'est vrai que ca devrait etre mieux, mais maintenant ca me fait une autre erreur:
 
[cpp]
$requete= mysql_query("SELECT COUNT(*)  
               WHERE MATCH(Titre, Description)
               AGAINST ('$searchstring')" ) or die(mysql_error());
[/ccp]
 
L'erreur est : Erreur de syntaxe près de 'WHERE MATCH(Titre, Description) AGAINST ('bonjour'' à la ligne 2
 
Donc il y a toujours un truc qui cloche :pt1cable:


Message édité par kray le 25-07-2005 à 10:50:59
mood
Publicité
Posté le 25-07-2005 à 10:50:16  profilanswer
 

n°1158817
sielfried
Posté le 25-07-2005 à 11:02:45  profilanswer
 

Avec un FROM c'est mieux nan ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1158831
rufo
Pas me confondre avec Lycos!
Posté le 25-07-2005 à 11:12:45  profilanswer
 

pour analyser ton champ recherche, vu que y'a que des AND, on peut supposer que l'espace est le délimiteur symbolisant le AND dans ton champ recherche. La fct php $Array = explode(" ", $Champ_Recherche) me parait bien : ça transforme ta chaîne en un tableau de mots... Après, tu construit ta requête SQL à partir de ce tableau.

n°1158857
kray
Bad show?
Posté le 25-07-2005 à 11:23:51  profilanswer
 

Code :
  1. $requete= mysql_query("SELECT COUNT(*) AS nombre FROM ListObj
  2.                WHERE MATCH(Titre, Description)
  3.                AGAINST ('$searchstring')" ) or die(mysql_error());
  4. $resultat= mysql_fetch_array($requete);
  5. echo $resultat['nombre'];


 
Effectivement ca  marche mieux avec un FROM  :lol:  
 
(shame on me again)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu]Moteur de recherche basique

 

Sujets relatifs
[prog PHP][resolu] Faire un PHP qui archive un sitemacro basique sous excel
[RESOLU] Envoi de POST vers un autre serveur avec HEADER[Résolu] simple requete en VBA :)
[Résolu] Redimensionner une image externe[php] récupérer plusieurs arguments [RESOLU]
[VBA][résolu]comment interrompre ma macro pour modifier une feuilleProbléme avec method="post" et "get" (Résolu )
[Resolu]Header already sent : Je ne trouve pas malgré mes recherchespb lors d'une recherche avec champs texte
Plus de sujets relatifs à : [Resolu]Moteur de recherche basique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR