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 :

Les solutions pour mettre en place un moteur de recherche


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut Les solutions pour mettre en place un moteur de recherche
    Bonjour,

    Je recherche des solutions afin de mettre en place un moteur de recherche sur un site, avec une énorme contrainte: le serveur est mutualisé, donc impossible d'installer une extension php ou autre, je dois trouver des solutions avec la version php 5.2 standard et mysql 5...

    J'ai déjà trouvé 2 "solutions":

    - Recherche dans Mysql avec des LIKE
    - Recherche dans Mysql avec des champs FULLTEXT et MATCH

    Vous allez me dire que c'est pas fameux fameux...j'ai aussi trouver une extension php mais qui n'est pas installé par défaut, donc impossible de l'exploiter...:

    - http://php.net/manual/fr/book.mnogosearch.php

    Question 1: Laquelle des 2 premières solutions est la "meilleure" entre des LIKE ou FULLTEXT?

    Question 2: Est-ce que PHP offre pas un genre d'extension type mnogosearch MAIS installé par défaut?

    Question 3: Des autres idées? avis?

    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le FULLTEXT c'est très bien pour faire de la recherche de texte, qu'est ce qui te bloque ?

  3. #3
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    Déjà merci pour votre réponse

    J'ai pu lire à plusieurs endroits que le FULLTEXT était pratique, mais devenait vite très lent une fois atteint un gros volume de données.

    La question est: Combien vaut "gros"? 100'000 enregistrements? 1'000'000?

    Tout cela dépend de ma table bien sûr, prenons un exemple, voici une table:

    - id INT
    - content1 TEXT
    - content2 TEXT
    - content3 TEXT
    - option1 VARCHAR 128
    - option2 VARCHAR 128
    - option3 VARCHAR 128

    Admettons que ma table contient 250'000 enregistrement avec de gros texte dans content1, 2 et 3, la recherche FULLTEXT sera acceptable niveau performance?

    Et niveau performance si on joint encore deux-trois tables?

    Merci

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t’inquiète pas c'est fait pour

  5. #5
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Dans tout les cas la méthode FULLTEXT est plus performante que des LIKE?

    EDIT: Aussi FULLTEXT ne fonctione que sur les table MyISAM, une solution pour les tables InnoDB?

    Merci pour votre réponse.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    Dans tout les cas la méthode FULLTEXT est plus performante que des LIKE?
    oui

    Citation Envoyé par nesswaw Voir le message
    EDIT: Aussi FULLTEXT ne fonctione que sur les table MyISAM, une solution pour les tables InnoDB?
    si tu veux absolument du InnoDB utilise LIKE pourquoi poser la question ?

  7. #7
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    C'est pour savoir si d'autres solutions existent

    Dans ce cas je vais prendre FULLTEXT sur une table MyISAM.

    Encore une petite question qui sort du contexte...Quelle est la différence entre MyISAM et InnoDb? C'est un peu une question de goût? vous préférez Audi ou VW

    Merci

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    C'est pour savoir si d'autres solutions existent

    Dans ce cas je vais prendre FULLTEXT sur une table MyISAM.

    Encore une petite question qui sort du contexte...Quelle est la différence entre MyISAM et InnoDb? C'est un peu une question de goût? vous préférez Audi ou VW

    Merci

    MyISAM est plutot pour la recherche de texte (grace FULLTEXT)
    InnoDB fait du transactionnel (ce que ne fait pas MyISAM)

    donc c'est pas une question de gouts mais de fonctionnalités

  9. #9
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Ok merci pour les réponses.

    J'ai fait un test, j'ai ajouter un FULLTEXT sur plusieurs champs d'une table, avec les données déjà existantes, si je fait une recherche, il ne trouve rien.

    Je recrée une nouvelle table avec direct les index, j'insère des données et la je peux rechercher sans problèmes.

    J'en conclut donc qu'il faut que je ré-index ma table pour qu'il prennent en compte mes données, comment je fait ça?

    Merci

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu dois avoir au moins 4 entrées je crois

    EDIT : visiblement c'est 3

    http://dev.mysql.com/doc/refman/5.0/...xt-search.html
    Assurez-vous d'insérer au moins trois lignes, et même plus.

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Le choix entre MyISAM et InnoDb, tout dépend de tes contraintes.
    • MyISAM est plus rapide et gère FULLTEXT.
    • InnoDb est plus puissant car il gère les relations et les transactions.


    A mon avis tout dépend de tes besoins.

  12. #12
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    tu dois avoir au moins 4 entrées je crois

    EDIT : visiblement c'est 3

    http://dev.mysql.com/doc/refman/5.0/...xt-search.html
    Oui oui j'ai plus de 10'000 entrées...et il ne trouve rien, je dois ré-indexer?

  13. #13
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Le choix entre MyISAM et InnoDb, tout dépend de tes contraintes.
    • MyISAM est plus rapide et gère FULLTEXT.
    • InnoDb est plus puissant car il gère les relations et les transactions.


    A mon avis tout dépend de tes besoins.
    Je ne peux pas avoir de FOREIGN KEY avec un MyISAM? Cela va me poser problème, j'ai des tables lié ou je devrais faire des recherches....

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    Je ne peux pas avoir de FOREIGN KEY avec un MyISAM? Cela va me poser problème, j'ai des tables lié ou je devrais faire des recherches....
    non on peut pas, alors après y'a des astuces en faisant des dumps vers des tables MyISAM via des Triggers mais bon ...
    tu vas devoir rester sur le LIKE

  15. #15
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    En testant je peux créer des tables MyISAM avec des FOREIN KEY et des FULLTEXT...

    Est-ce que je confond quelque chose? ou alors montrez moi un exemple pas possible.

    EDIT: Je ne comprend pas tout, j'ai fait le 1er exemple de la doc de Mysql => http://dev.mysql.com/doc/refman/5.0/...xt-search.html

    Si je recherche le mot "database" comem dans l'exemple ça fonctionn bien...
    Par contre si je test avec le mot "mysql", "after", "never" il n etrouve rien, alors que ces mots existent...

    Si je recherche "tutorial" ou "DBMS" la il trouve....

    Pourquoi il trouve pas tout???

    Merci pour vos éclaircissement

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tes INDEX se font ?

    EDIT : t'es peu être en case sensitive collation_cs (au lieu de _ci)

  17. #17
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Apparemment oui, voici mon code sql pour CREATE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CREATE  TABLE IF NOT EXISTS `test` (
      `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
      `title` VARCHAR(64) NULL DEFAULT NULL ,
      `content` TEXT NULL DEFAULT NULL ,
      `fk_idLocalite` INT(10) UNSIGNED NOT NULL ,
      PRIMARY KEY (`id`) ,
      INDEX `fk_localite1` (`fk_idLocalite` ASC) ,
      CONSTRAINT `fk_localite1`
        FOREIGN KEY (`fk_idLocalite` )
        REFERENCES `localite` (`idLocalite` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = MyISAM
    DEFAULT CHARACTER SET = utf8
    COLLATE = utf8_general_ci;
    EDIT: Ma base est en utf8_general_ci et mes tables aussi

    EDIT 2: Heu apparemment non, si j'insère une entrée je peux mettre n'importe quoi dans mon champ qui est censé être une clé étrangère...

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est le résultat de ton show create table ?

  19. #19
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    C'est la requête que j'ai lancer via phpmyadmin pour créer ma table...il la crée sans problème, mais par contre j'ai vu qu'il ne gérait quand même pas les relations...

    Du coup dommage, je vais faire autrement, par contre j'ai toujours ce problème de recherche avec FULLTEXT qui me trouve pas tout...

    Une idée pour ça?

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2010, 16h03
  2. Réponses: 2
    Dernier message: 19/08/2009, 10h59
  3. Réponses: 1
    Dernier message: 27/02/2009, 09h32
  4. Réponses: 0
    Dernier message: 09/10/2008, 14h45
  5. [Performance] Solution pour mettre en cache l'application
    Par anthyme dans le forum Silverlight
    Réponses: 6
    Dernier message: 28/02/2008, 13h11

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