Moteur de recherche basique [Resolu] - PHP - Programmation
Marsh Posté le 23-07-2005 à 11:06:38
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
Marsh Posté le 23-07-2005 à 11:49:48
Et passer tes champs en fulltext pour eliminer le besoin de faire un LIKE %$qqch% qui est catastrophique du point de vue resources
Marsh Posté le 23-07-2005 à 12:19:12
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).
Marsh Posté le 23-07-2005 à 12:31:00
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...
Marsh Posté le 23-07-2005 à 13:01:58
kray a écrit :
|
va voir sur le site de mysql, leur réponse sera bien plus complete que la mienne
Marsh Posté le 23-07-2005 à 16:58:38
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 [/edit]
Si vous avez d'autres idées proposez quand meme! ;-)
Marsh Posté le 24-07-2005 à 14:06:58
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 :
|
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)
Marsh Posté le 24-07-2005 à 23:36:12
Si tu enleve Titre, Description, ca marchera mieux... pour le count...
Marsh Posté le 25-07-2005 à 10:50:16
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
Marsh Posté le 25-07-2005 à 11:02:45
Avec un FROM c'est mieux nan ?
Marsh Posté le 25-07-2005 à 11:12:45
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.
Marsh Posté le 25-07-2005 à 11:23:51
Code :
|
Effectivement ca marche mieux avec un FROM
(shame on me again)
Marsh Posté le 23-07-2005 à 10:42:42
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
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