IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Créer un moteur de recherche par mots clés rapide PHP


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut Créer un moteur de recherche par mots clés rapide PHP
    Bonjour,

    j'en appel à votre savoir faire pour me donner les bonnes pistes à suivre.
    Je développe actuellement un site intranet pour mon entreprise contenant des fiches produits. Jusqu'à maintenant le moteur de recherche était créé à l'aide de requêtes à base de LIKE '%mot clé%' OR LIKE '%mot clé 2%' ce qui marchait très bien au début mais lorsque désormais la base pèse 3Go avec plus de 80000 fiches produits je peux vous dire que la pauvre base de données souffre un peu lors de la requête.

    En faisant pas mal de recherches, j'ai essayé de trouvé comme certains site faisaient pour trouver un résultats en moins de 3 sec sur des bases énormes.

    Apparemment lors de l'ajout d'une fiche celles-ci sont explosées en mots clés qui sont stockés dans la base et si j'ai bien compris lors de la recherche il suffit de trouvé les mots clés déjà indexés et de sortir les fiches produit correspondantes.

    Je ne sais pas si j'ai été clair ni si j'ai bien compris mais si quelqu'un pouvait m'expliquer le procédé en détail ou m'indiquer un lien qui l'explique ça serait super ...

    Pour résumé je cherche une solution pour faire un moteur de recherche par mots clés ultra rapide en PHP/MySql.

    Un grand merci d'avance à celui qui pourra m'éclairer !!!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Un recherche FULLTEXT serait peut être plus rapide qu'un LIKE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Merci pour ta réponse rapide mais ça reste toujours trop lourd, je recherche vraiment la solution par indexation de mot clé en base (je ne sais pas si elle s'appelle comme ça )

  4. #4
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Points : 51
    Points
    51
    Par défaut
    salut

    avant tous, il serait intéressant de connaitre un peu ton modèle de base.
    Les fiches sont indexé en catégorie, sous catégorie,.... via des tables, idem pour les mots clés et autres.

    Les types index(numérique, texte, binaire), les verrous et autres.

    Le premier problème viens en général de la conception de la db.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Et bien disons que dans ce cas précis le modèle est très simple puisqu'il n'y a aucune jointure de table.
    je ne peux pas trop déballer l'architecture de la base (règlement intérieur) mais la table sur laquelle la recherche se fait est du type :

    id - intitule - description - reférence - .....

    Je veux lancer mes recherches sur intitule et description.

    intitule étant un varchar (255) et description un gros bloc de texte.

    Je pensais donc exploser les intitulés et les descriptions en mots clés et les stocker dans une autre table où je ferai mes recherches.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    erci pour ta réponse rapide mais ça reste toujours trop lourd, je recherche vraiment la solution par indexation de mot clé en base
    Avant de dire que c'est lourd l'as tu testé ?
    Le FULLTEXT est une recherche indexée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    LOL oui Sabotage j'ai testé, c'est une des méthodes classiques, je cherche un truc encore plus performant.

  8. #8
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Points : 51
    Points
    51
    Par défaut
    Pour ma part la seule considération possible est de réécrire ton schéma de base.
    et du même réécrire ton client

    Même avec un FULL TEXT ca changera rien.

    Une possibilité existe, avec des vues partielles.

    bon courage.

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2008
    Messages : 72
    Points : 102
    Points
    102
    Par défaut
    Tu peux utiliser SphinxSearch c'est assez galère à mettre en place, mais une fois fait les résultats sont plutôt magnifique. Ca fait tes requêtes de recherche "à l'avance" puis un daemon se charge de fouiller dans cet index.

    Je l'avais mis en place car la table était (et devait rester) en innoDB (donc pas d'index fulltext) et au final je ne l'ai pas regretté. MediaWiki se sert d'une table réservée aux "mots" clés, ce qui pourrait être une solution.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 43
    Points
    43
    Par défaut
    Bonjour, merci pour vos réponses, Sphinx est effectivement un bon produit mais n'est autre qu'un moteur full text pour les base en innoDB ou autre qui ne supporte pas le full text. Pour ma part n'ayant aucune obligation de moteur (pas de relation entre ma table et une autre) et faisant essentiellement du "SELECT" je suis en MyIsam qui est plus performant.
    Je n'ai effectivement pas pensé à me pencher sur le code de mediawiki qui est effectivement très rapide en recherche. Si tu me dis qu'il se sert d'une table dédiée aux mots clés je pense que c'est cette méthode que je recherche tant bien que mal
    Merci

Discussions similaires

  1. Recherche par mot clés - Php -Mysql
    Par pod1978 dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/09/2006, 13h01
  2. recherche par mots-clés dans base access
    Par syber72 dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2006, 13h53
  3. [MySQL] recherche par mots clés
    Par spartan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/02/2006, 16h11
  4. [Tableaux] Moteur de recherche par mot clés
    Par Nee dans le forum Langage
    Réponses: 4
    Dernier message: 20/01/2006, 11h30
  5. Recherche par mots clés
    Par legillou dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo