Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] PHP, Jelix et moteur de recherche

Posted by Nesswaw on 06/09/2011 13:03

Bonjour,

Je savais pas trop ou posté cette question... Je dois faire un formulaire qui permettra de recherche des article dans une table sql, avec divers critères...

Quel sont les méthodes pour rechercher dans des tables sql? et au niveau des performances (si la table comporte des milliers d'enregistrement)?

Merci d'avance

  [Opened] PHP, Jelix et moteur de recherche

Reply #1 Posted by foxmask on 06/13/2011 23:01

En fait ça dépend pas mal du moteur de SGBD(R).

Sur oracle par exemple, les prépare statement boostent la recherche puisque la requête est mémorisée une fois pour toute par le SGBDR et pas besoin d'être réanalysée. Manque de bol avec PHP PrepareStatement (et driver PDO) ne semblent pas être la panacée.

Ensuite selon le volume d'une table, si on oubli des index ca peut-être fatal pour les perf et inversement, toujours passer par la colonne indexée revient à faire une recherche non discriminante et donc une lecture séquentielle.

Mais après on peut s'orienter vers des moteurs de recherche genre http://sphinxsearch.com/ et consors qui sont eux taillés pour encaisser de forte charge.


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] PHP, Jelix et moteur de recherche

Reply #2 Posted by foxmask on 06/14/2011 09:54

on m'a dit sur irc que le mieux c'était de pas faire de moteur de recherche avec un SGBD :-)

donc autre choix :

  • http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
  • http://lucene.apache.org/solr/
  • au pire des like avec mysql

@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] PHP, Jelix et moteur de recherche

Reply #3 Posted by Nesswaw on 06/16/2011 14:18

Bonjour,

Merci pour votre réponse.

Alors comment sont fait les moteurs de recherches sur les sites? ils sont obligés de faire des recherches dans une base...comment fonctionne la recherche de ce forum?

Merci

  [Opened] PHP, Jelix et moteur de recherche

Reply #4 Posted by laurentj on 06/17/2011 14:30

Salut,

En premier lieu, tu as les pseudo "moteurs de recherche" du pauvre, qui ne font que faire un LIKE sur les champs des données sur lesquelles la recherche se fait. C'est rapide à développer, ça peut fonctionner à peu près sur des petits sites, mais cela a de nombreux inconvénients, dont :

  • problème de performance, surtout quand le volume se met à augmenter
  • problème de pertinence, puisqu'il n'y a aucune gestion de la pertinence
  • problème d'exhaustivité, car ce genre de moteur n'est pas "intelligent"

Des moteurs de bases de données permettent d'améliorer ces inconvénients, par exemple mysql, en permettant d'avoir un index de type "fulltext" sur tes champs, et utiliser des expressions comme MATCH au lieu de LIKE. Mais ce n'est pas la panacé.

Dés que tu veux avoir un truc efficace et performant, il faut passer par des solutions dédiées, qui ont été développée pour.

Le principe de ces solutions est grosso modo le suivant

  1. tu leur indiques quels sont les données sur lesquelles il faut effectuer la recherche, comment aller les chercher, ou alors ton application lui donne ces données directement (lors d'un ajout, une mise à jour etc..). On peut aussi parfois leur indiquer un "poid" (ou alors le moteur peut le deviner tout seul, ça dépend du type de la donnée)
  2. tu leur indiques à quelles pages ces données correspondent
  3. ces moteurs vont alors régulièrement analyser ces données : ils vont les récupérer, extraire ce qui peut être rechercher et stocker tout ça dans des gros index
  4. lorsqu'une recherche est demandée, ils cherchent dans les index qu'ils ont construit et te renvoi les identifiants des données qui contiennent ces termes

En gros, un moteur de recherche est composé d'un indexeur d'une part, et du moteur de recherche d'autre part.

Pour le forum, il y a un module hfnu_search pour ça. Si je ne me trompe pas, on lui balance les données à indexer lors de l'ajout/modification d'un post. Il analyse ces données (il extrait tout les mots pertinents), et classe tout ça dans une table spécifique qui servira donc d'index. Cette table contient un champs datasource indiquant le type de la donnée (en général, on indique le selecteur du dao), un champs contenant l'identifiant de la donnée, un champs contenant un mot de cette donnée, et enfin un champs indiquant le poid de ce mot (ce qui va servir à organiser les résultats en fonction de leur pertinence). La clé d'un enregistrement repose sur les trois champs datasource, id, mot. En gros donc on a un enregistrement pour chaque mot de chaque post. Bien entendu, on ne stocke que les mots pertinents, de plus de trois lettres etc..

toute la difficulté du moteur de recherche sera dans la manière d'extraire les mots, de les ordonner, et de son algo pour retrouver ce qui est recherché. Ici, dans le forum c'est super simpliste, on est loin des algos de google &co :-)

Bref, si tu peux techniquement et au niveau temps, utilise une solution existante comme celles listées plus haut. Ça peut être embêtant à configurer et à mettre en place, mais ça sera beaucoup plus puissant.

  [Opened] PHP, Jelix et moteur de recherche

Reply #5 Posted by Nesswaw on 06/23/2011 13:15

Merci pour la réponse...

En effet, ça a pas l'air simple...il faut que je regarde tout ça...

 
Page
  1. PHP, Jelix et moteur de recherche