Comment programmer un moteur de recherche efficace ?

beenie
WRInaute discret
WRInaute discret
 
Messages: 54
Inscription: 18 Aoû 2008

Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 9:54

Bonjour,


J'essaie de mettre en place un moteur de recherche et je me trouve face à deux difficultés :

-comment faire si les personnes tapent les mots sans accents alors que dans la base de donnée les accents sont représentés sous la forme : é = & eacute; par exemple

-comment faire pour gagner en pertinence car pour l'instant je construit une requête avec les différents mot trouvés: select * from maTable where description like %mot1% OR description like %mot2%, etc....
Si j'utilise AND, alors il n'y pas assez de résultat
SI j'utilise OR j'ai trop de resultat

Voilà donc je recherche les pistes pour améliorer le moteur, comment les programmez-vous pour qu'ils soient efficaces?
merci.


dorian53
WRInaute passionné
WRInaute passionné
 
Messages: 2251
Inscription: 10 Avr 2005

Re: Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 11:22

Salut,

beenie a écrit:-comment faire si les personnes tapent les mots sans accents alors que dans la base de donnée les accents sont représentés sous la forme : é = & eacute; par exemple

La franchement ça va être compliqué et surtout très lourd. Il vaut mieux avoir les accents directement.

beenie a écrit:-comment faire pour gagner en pertinence car pour l'instant je construit une requête avec les différents mot trouvés: select * from maTable where description like %mot1% OR description like %mot2%, etc....
Si j'utilise AND, alors il n'y pas assez de résultat
SI j'utilise OR j'ai trop de resultat

Pour récupérer une liste de résultats pertinente comme un moteur de recherche il existe des fonctions propres au SGBD.
Par exemple, si tu utilises MySQL, il faut que tu indexes ton champ en fulltext et utilise la fonction MATCH / AGAINST.

http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html


stopher
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 16
Inscription: 10 Mar 2010

Re: Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 13:03

Salut ,

dorian53 a écrit:Salut,

beenie a écrit:-comment faire si les personnes tapent les mots sans accents alors que dans la base de donnée les accents sont représentés sous la forme : é = & eacute; par exemple

La franchement ça va être compliqué et surtout très lourd. Il vaut mieux avoir les accents directement.



Pour la gestion des accents , il te suffit d'utiliser des tables avec des champs encodés en "utf8_general_ci" , mysql ne tiendra plus compte des accents pour tes recherches .

Ch.

jv2759
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 447
Inscription: 21 Nov 2008

Re: Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 13:22

Sinon autre solution si tu as un peux de place dans tes base de donnée et beaucoup de pages c'est de faire un prêt traitement.

Tu crée 2 table

motcle
id
mot

liaison
idmc
idpage
score

- tu récupère le texte de ta pages
- tu fait un htmldecode
- puis tu remplace les accents par leur équivalent sans
- tu découpe en mots
- tu supprime les mots non significatif (pour alléger et simplifier)
- tu met tout les mot nouveaux que tu trouve dans la table motcle
- puis pour chaque mots tu met une entré dans la table liaison. Le score tu peux mettre par exemple le nombre de fois ou le mots aparais dans la pages (a affiner en fonction des besoin)

Ensuite quand tu fait une recherche, tu fait la même chose :
- htmldecode
- remplacer les accents
- découper en mots
- supprimer les mots non significatif
- enfin une recherche avec un = (plus léger qu'un like ou match)

inconvénient
- plus lourd à mettre en œuvre
- obligation de faire un pré-traitement
- peux retourner mois de résultat
- consomme de l'espace base

avantage
- requette plus légère, surtout si beaucoup de texte à analyser
- plus grand maitrise de l'algorithme et possibilité d'affiner les score
- traitement d'autres chose que du texte en base possible.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 21990
Inscription: 8 Aoû 2004

Re: Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 14:13

dorian53 a écrit:http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html
je n'ai jamais trouvé fulltext performant.
Pour un "bon" moteur de recherches, j'ai vu passer sur wri il y a 2-3 semaines, un post sur sphinx. visiblement il a l'air d'être puissant, mais pas évident à paramétrer


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2445
Inscription: 20 Fév 2005

Re: Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 14:16

Et pourquoi pas ré encoder la recherche de l'utilisateur avec une petite fonction qui échangerait les é par & eacute; et compagnie .. puis effectuer la recherche en utilisant REGEXP au lieu de LIKE ?
Bon, c'est juste une idée et peut être pas la meilleurs :wink:


Leonick
WRInaute accro
WRInaute accro
 
Messages: 21990
Inscription: 8 Aoû 2004

Re: Comment programmer un moteur de recherche efficace ?

Message le Lun Mar 15, 2010 15:05

tryan a écrit:Et pourquoi pas ré encoder la recherche de l'utilisateur avec une petite fonction qui échangerait les é par & eacute; et compagnie .. puis effectuer la recherche en utilisant REGEXP au lieu de LIKE ?
Bon, c'est juste une idée et peut être pas la meilleurs :wink:
sauf que dans la BDD, c'est quand même mieux d'avoir directement les caractères accentués et pas sour forme d'entité


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2445
Inscription: 20 Fév 2005

Re: Comment programmer un moteur de recherche efficace ?

Message le Mar Mar 16, 2010 8:09

Je suis daccord et je partais juste de l'hypothèse qu'il a déjà pas mal contenu et qu'il voulait "greffer" un moteur de recherche interne à son site sans avoir besoin de se retaper les corrections ^^.


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Re: Comment programmer un moteur de recherche efficace ?

Message le Jeu Mar 18, 2010 9:49

Sinon utiliser un outils fait pour comme sphinx (open source et très bien fait). Bon c'est pas aussi simple que faire une requête mais c'est extrêmement efficace.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


cron