Moteur de recherche : Comment stocker proprement les données ??

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche : Comment stocker proprement les données ??

par supercanard » 01 nov. 2008, 19:51

J'avais pensé à cette solution de table contenant les mots clés mais donc pour un seul mot tu as une association à un texte ? Enfin au minimum car un mot clé peut être présent dans 2300 texte, donc 2300 lignes pour un seul mot clé ?
C'est sur que la lecture sera toujours plus rapide que de chercher tous les textes entier un par un...

Pour avoir un ordre d'idée, la solution simple avec LIKE peut être potable pour une table de quel taille ? Je sais que c'est difficile à chiffrer d'autant que ça dépend du serveur, mais par exemple dans ma table de test j'ai environ 500 enregistrements. Phpmyadmin me chiffre la table à 2,5 mo.
C'est peu mais à ce rythme là ça va augmenter très vite...

par Ryle » 01 nov. 2008, 15:06

Ca marche effectivement très bien avec un like pour faire des recherches, à toi également de constituer la bonne requête pour, en fonction des critères de recherches, retourner la chaine exacte (un simple like), l'ensemble des mots qu'elle contient (plein de like avec des AND), ou n'importe lequel des mots (plein de like avec des OR).

Ca reste un petit moteur de recherche simple et efficace. Maintenant, quand la volumétrie devient importante, faut se tourner vers d'autres façon de faire pour gagner en performance.

Un exemple parmis d'autre : envisager une table de mots clés (id, mot clé) alimentée automatiquement par tous les mots de plus de 2 ou 3 lettres (en filtrant articles, déterminants, etc.) et associer à chaque texte les id des mots clés correspondant dans une table de liaison. Ta recherche de mots se fait alors uniquement avec des "=" sur cette table et non plus avec des like, puis les id correspondant en poche, tu retrouves rapidement les textes qui les contiennet grace à ta seconde table. Les index et les "=" te permettront d'aller beaucoup plus vite sur une certaine volumétrie, que de devoir faire un fullscan de ta table pour vérifier enregistrement par enregistrement qu'il y a une correspondance avec ton ou tes like :)

par supercanard » 01 nov. 2008, 13:45

Un moteur de recherche ? avec des like ? ouhla... :-s
Bah pour rechercher dans une base de données, LIKE rempli bien ce rôle non ?
( Pour un "petit" moteur de recherche simple évidement )

par Berzemus » 01 nov. 2008, 11:24

Un moteur de recherche ? avec des like ? ouhla... :-s

Moteur de recherche : Comment stocker proprement les données

par supercanard » 01 nov. 2008, 01:44

Bonjour,

Je suis en train de "m'amuser" à faire un petit moteur de recherche simple avec un petit crawler à côté.
C'est une petite expérience pour apprendre concrètement les regex et les requêtes avec like qui me terrorisaient un peu jusqu'à maintenant ;)

Le point qui me fait me poser le plus de questions et comment enregistrer le plus proprement possible les données ?
Actuellement je fait simplement un strip_tags pour supprimer un maximum de balises lorsque le crawler lit la page. Je n'obtient pas toujours un résultat impeccable car il arrive qu'une multitude d'espaces ou de retours chariots trainent un peu partout.
Faut-il abuser des regex pour nettoyer au maximum ou y'a t'il une technique particulière et autre pour stocker les données quand elles sont destinées à un moteur de recherche ?