Développer un moteur de recherche en PHP.

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


blman
WRInaute accro
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Développer un moteur de recherche en PHP.

Message le Mer Déc 07, 2005 17:17

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
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Message le Jeu Déc 08, 2005 18:44

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
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Message le Ven Déc 09, 2005 11:51

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
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Ven Déc 09, 2005 12:12

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:22, édité 3 fois.

spidetra
WRInaute accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Ven Déc 09, 2005 12:16

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:22, édité 1 fois.


blman
WRInaute accro
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Message le Ven Déc 09, 2005 14:11

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
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Ven Déc 09, 2005 19:38

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:22, édité 2 fois.


mowmow
WRInaute passionné
WRInaute passionné
 
Messages: 975
Inscription: Mer Nov 03, 2004 9:40

Message le Ven Déc 09, 2005 19:54

http://fr.php.net/manual/fr/function.levenshtein.php et fonctions similaires, va faire un tour ;)

spidetra
WRInaute accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Ven Déc 09, 2005 20:03

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:22, édité 1 fois.


mowmow
WRInaute passionné
WRInaute passionné
 
Messages: 975
Inscription: Mer Nov 03, 2004 9:40

Message le Ven Déc 09, 2005 20:30

Ah oui j'ai confondu avec soundex x_o désolé

spidetra
WRInaute accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Sam Déc 10, 2005 12:00

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:23, édité 1 fois.

spidetra
WRInaute accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Dim Déc 11, 2005 10:53

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:23, édité 1 fois.

spidetra
WRInaute accro
WRInaute accro
 
Messages: 1500
Inscription: Lun Juil 07, 2003 13:06

Message le Lun Déc 12, 2005 12:41

...
Dernière édition par spidetra le Ven Aoû 04, 2006 13:23, édité 1 fois.


blman
WRInaute accro
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Message le Mar Déc 13, 2005 10:41

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
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Message le Mar Déc 13, 2005 11:56

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.

Développer un moteur de recherche en PHP.

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google SearchMash

  • Analyse du positionnement
    AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés.
  • Transformer des simples citations de votre site en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

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