| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
blman WRInaute accro

Inscrit le: 05 Sep 2003 Messages: 2559 Localisation: Nantes / Laval (France)
|
Posté le : Mer Déc 07, 2005 18:17 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
Hello,
Pour le site dont je m'occupe, j'aimerais vraiment développer un moteur de recherche assez poussé. Pour le moment, mon moteur se base sur un truc assez basique du genre : http://www.phpinfo.net/articles/article_moteur.html .
Je me suis basé sur l'architecture de PhpDig ( http://www.phpdig.net ) pour ma base de données qui est la plus optimisée possible, je pense. Mais là, je commence à avoir des doutes...
Avez-vous quelques articles ou tutoriels sous le coude pour développer quelques choses d'assez poussé ?
Je vous demande ça car au fil de mes recherches, je ne tombe que sur des articles pour "débutant"... |
|
| |
|
 |
blman WRInaute accro

Inscrit le: 05 Sep 2003 Messages: 2559 Localisation: Nantes / Laval (France)
|
Posté le : Jeu Déc 08, 2005 19:44 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
Bon bé puisque personne ne me répond, je vais vous faire part de mes différents tests et recherches. Le site en question est un site e-commerce. Le moteur doit recherché dans les fiches produits.
Ce moteur a pour but de proposer des résultats pertinents aux recherches des visiteurs du site.
ARCHITECTURE OPTIMISEE DE LA BDD
----------------------------------------------------------
-----------------------------------------------------------
| SEARCH_KEYWORDS |
-----------------------------------------------------------
| keyword VARCHAR(255) UNIQUE |
| key_id INT(11) PRIMARY KEY AUTO INCREMENT |
-----------------------------------------------------------
---------------------------------------------
| SEARCH_ENGINE |
---------------------------------------------
| key_id INT(11) INDEX |
| weight TINYINT(2) |
| ref_prod VARCHAR(15) INDEX |
---------------------------------------------
keyword : mot clé
key_id : identifiant du mot clé
weight : poids du mot clé
ref_prod : référence du produit
PHASE D'INDEXATION
-------------------------------------------------------------
1- Pour chaque produit, on sélectionne sa famille, sa marque, sa désignation, son descriptif
2- On transforme chaque chaine : on enleve les tags HTML, les backslashes et on met tout en minuscule.
Ensuite, on transforme les caractères spéciaux en caratères HTML grâce à la fonction HTML entities
3- On remplace les caractères génants par des espaces. Exemple de caractères génants : ,.+-*/:=()'!?%, " &euro < > etc...
4- On transforme les accents : Par exemple, é->e, è->e, etc...
5- A chaque type de champ, on associe un poids des mots. Par exemple, les mots contenus dans la désignation pourront avoir un poids de 99, ceux compris dans la marque pourront avoir un poids de 30, ceux dans le descriptif de 1.
6- Pour chaque type de champ, on explose la chaine et on stocke chaque mot dans 1 tableau.
7- Pour chaque mot :
. Si le mot n'est pas insérer dans SEARCH_KEYWORDS, on l'insère et on insère son identifiant, son poids et la référence du produit dans SEARCH_ENGINE
. Sinon, on sélectionne son identifiant dans SEARCH_KEYWORDS et on l'insère dans SEARCH_ENGINE avec son poids et la référence du produit.
L'étape d'indexation est finie ! Bien sûr, il faut optimiser le tout, parce que si vous avez comme moi plus de 3000 produits avec de bonnes grosses fiches, vous allez exploser votre serveur MySQL
PHASE DE RECHERCHE
--------------------------------------------------------------
1- on met en place un formulaire tout con avec un champ recherche
2- Lorsque la chaine de recherche est envoyée, on nettoie la chaine (on enleve les tags HTML, les backslashes et on met tout en minuscule. Ensuite, on transforme les caractères spéciaux en caratères HTML grâce à la fonction HTML entities. On remplace les caractères génants par des espaces. Exemple de caractères génants : ,.+-*/:=()'!?%," &euro < > etc... On transforme les accents : Par exemple, é->e, è->e, etc...
3- On explose la chaine en mots clés.
4- On boucle pour supprimer les caractères courants (de, le, un, une, ...)
5- On fait une requête sur notre base de données en comparant les mots clés (j'utilise OR) et en additionnant le poids des mots.
6- On tri par poids des mots (le plus grand poids s'affichant en premier)
7- On affiche que les résultats qui ont une pertinence supérieure à 50% (on se base sur le poids maximum. Si la somme de tous les poids de mon premier résultats fait 240, on affiche que les résultats dont la somme de leur poids est supérieure à 120)
Voila, j'en suis là pour le moment. Les résultats de mes recherches ont l'air plutôt pas mal du tout. Mais il me reste encore beaucoup de choses à améliorer. J'attend bien sûr vos commentaires ! |
|
| |
|
 |
blman WRInaute accro

Inscrit le: 05 Sep 2003 Messages: 2559 Localisation: Nantes / Laval (France)
|
Posté le : Ven Déc 09, 2005 12:51 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
Les problèmes que je rencontre pour le moment :
- le singulier et le pluriel
- le calcul du poids des mots peut être faussé à cause de la longueur des textes. Je doit donc calculer un indice de densité (poids des mots par rapport au nombre de mots dans le texte).
Tout ça ne pause pas de problème de traitement, c'est plutôt facile à calculer, mais en terme de ressources, ça en bouffe énormément ! |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Ven Déc 09, 2005 13:12 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:22; édité 3 fois |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Ven Déc 09, 2005 13:16 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:22; édité 1 fois |
|
| |
|
 |
blman WRInaute accro

Inscrit le: 05 Sep 2003 Messages: 2559 Localisation: Nantes / Laval (France)
|
Posté le : Ven Déc 09, 2005 15:11 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
Et bien merci de ton avis spidetra !
En fait, dans mon cas, le couple PHP / MySQL suffit largement, je pense. J'ai environ 3000 produits et je n'indexe que le contenu de ma base de données (pas de fichier HTML ou PDF).
La phase d'indexation prend beaucoup de ressources, oui. Mais je pense que par la suite, cette phase n'aura plus jamais lieu. En fait, à chaque fois qu'une fiche produit est ajoutée, modifiée ou supprimée dans le backoffice, le programme ne réindexera que cette fiche. Ce sera donc très économique en ressources.
Pour ce qui est de la recherche, pour le moment, mes requêtes sont elles aussi assez économiques en ressources. Le probème, c'est que même si j'ai réussi à améliorer énormément la qualité de mes résultats, il y a toujours mieux à faire...
Je me renseigne pour les espaces vectoriels de Salton (ça fait peur ce nom, quand même). Merci ! |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Ven Déc 09, 2005 20:38 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:22; édité 2 fois |
|
| |
|
 |
mowmow WRInaute passionné

Inscrit le: 03 Nov 2004 Messages: 962 Localisation: Zend Engine
|
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Ven Déc 09, 2005 21:03 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:22; édité 1 fois |
|
| |
|
 |
mowmow WRInaute passionné

Inscrit le: 03 Nov 2004 Messages: 962 Localisation: Zend Engine
|
Posté le : Ven Déc 09, 2005 21:30 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
| Ah oui j'ai confondu avec soundex x_o désolé |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Sam Déc 10, 2005 13:00 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:23; édité 1 fois |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Dim Déc 11, 2005 11:53 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:23; édité 1 fois |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Lun Déc 12, 2005 13:41 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:23; édité 1 fois |
|
| |
|
 |
blman WRInaute accro

Inscrit le: 05 Sep 2003 Messages: 2559 Localisation: Nantes / Laval (France)
|
Posté le : Mar Déc 13, 2005 11:41 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
Ouha, merci les gars pour toutes ces infos.
Pour le problème du pluriel / singulier, je m'en tire pour le moment avec une bidouille pour le moment : pour toutes les chaines de plus de 4 caractères, j'enlève le 's' si il y en a un à la fin du mot. Mais bon, ça reste de la bidouille, il faut que je fasse quelquechose de plus carré.
Pour ta question spidetra, j'ai effectivement rajouté un champ à ma table search_engine pour savoir quel type de mot il s'agit (titre, description, famille, marque, ...). Ca me permet de configurer le poids que j'attribue à chaque mot.
Bon, je regarde tout ce que vous venez de me recommander et je vous fais part des résultats de mes stats qui risques d'être très long. (en ce moment, j'analyse la pertinence de plus d'une centaine de requête à chaque fois que je fais une modif). |
|
| |
|
 |
blman WRInaute accro

Inscrit le: 05 Sep 2003 Messages: 2559 Localisation: Nantes / Laval (France)
|
Posté le : Mar Déc 13, 2005 12:56 Sujet du message: Développer un moteur de recherche en PHP. |
|
|
Je viens de regarder FULL TEXT. C'est très bien mais ça ne convient pas vraiment à mon cas, car j'ai beaucoup d'info dans ma table qui sont des référénces à d'autres tables. Je vais quand essayer d'approfondir...
Je vais aussi tester la fonction SOUNDEX : peut-être pas pour les résultats mais pour proposer une autre recherche en cas de faute d'orthographe. |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
Définitions :
|
|