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 :

Recherche par mots clés


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut Recherche par mots clés
    Bonjour à tous

    J'ai une table "articles" où je souhaite associer des mots clés pour faire des recherches sur ces mots.

    J'ai la solution de créer une table "articles_motscles" pour ce faire.
    C'est déjà ça.


    Mais ne souhaitant pas faire simple
    Je souhaiterais rajouter un champ "motscles" dans le table "articles" pour insérer les mots clés séparés par une virgule.
    Comme ceci :
    Développer, Php,MySQL,Html,Css,PostGreSQL Php,JavaScript

    Cependant, je coince totalement du comment réaliser la requête SQL, ça m'a l'air bien compliqué.
    En tout cas je ne souhaite pas faire : ... motscles LIKE '%blablabla%'
    ni même : ... motscles LIKE 'blablabla%'
    car cela va trouver un résultat rien qu'en tapant "MyS".
    De même que Php sera évalué 2 fois si je saisi "Php".

    Il faudrait que chaque mot clés saisis soient identiques et complets (à part la casse) par rapport aux séries de mots enregistés.
    Si je saisi "Php" (tout court) cela l'évaluera qu'1 seule fois.
    Même chose si je saisi "Php PostGreSQL".


    Je ne sais franchement pas par quel bout commencer.
    Si vous avez une piste ...

  2. #2
    Expert confirmé

    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
    Par défaut
    pour les moteurs de recherche faut pas utiliser la base direct, fait plutôt du Lucene ou du Sphinx

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ; RunCodePhp j'aimerai bien t’aidai.
    ta BDD est sur mysql Innodb ou MYISAM ou autre !!!

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par redoran
    Salam ; RunCodePhp j'aimerai bien t’aidai.
    ta BDD est sur mysql Innodb ou MYISAM ou autre !!!
    C'est MyISAM, et pas d'autres choix possible.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    donc :
    ce que tu veut cherché? un mot clé
    ou le chercher ? dans un champs
    type de champs? varchar(a toi de voir)
    les clés seront enregistrés sous forme de texte ( php,javascript...).
    si j'ai bien compris la recherche de la clè doit se faire sur un texte enregistré.
    http://dev.mysql.com/doc/refman/5.0/...xt-search.html
    j

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    type de champs? varchar(a toi de voir)
    là faut prendre en considération le calcul de pertinence de mots clé.

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    @kabkab
    La modélisation que tu décris est justement celle qui me posera le moindre problème.
    A ce stade là, je sais faire.
    Je crains cependant que cette conception (classique on va dire) ne soit pas optimisée que MySQL s'écroule.
    Nombre d'articles important, de mots clés, etc ...

    D'où l'idée de "casser" un peu le modèle pour tenter de palier à ça.


    Citation Envoyé par redoran
    si j'ai bien compris la recherche de la clè doit se faire sur un texte enregistré.
    En quelque sorte oui.
    L'idée est juste de faire une suite de mots (clés), donc au final ça fait quand même une chaine.
    Rien empêche de définir ce champ en TEXT, FULLTEXT ou en VARCHAR.
    Bien qu'un VARCHAR est limité à 255 caractères, à cet instant je ne sais pas si ce sera suffisant.


    Citation Envoyé par stealth35
    non puisque ça fera du multi champs directement plus les ressemblances entre les mots
    Est-ce que le coté "ressemblance" ne risquerait pas de rendre les choses moins pertinentes ?

    Si j'ai un article qui contient le mot "Php" puis un autre "Php PostGreSQL", est-ce que ça risque de retourner les 2 articles si je saisi "Php" ?
    Chose que je ne souhaite pas.

  8. #8
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Ce ne serait pas l'équivalent de définir le contenu des articles en FULLTEXT ?
    Ou Lucene (ou Sphinx) serait quelque chose de très différent ?

    Même si j'ai déjà entendu parlé de cela, j'ai jamais prospecté.

  9. #9
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    On dirai que vous lisez dans les pensées :
    http://dev.mysql.com/doc/refman/5.0/...xt-search.html mais sa marche avec MYISAM. fait un tour en attendant que je cherche sur d'autre site.

  10. #10
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ce ne serait pas l'équivalent de définir le contenu des articles en FULLTEXT ?
    Ou Lucene (ou Sphinx) serait quelque chose de très différent ?

    Même si j'ai déjà entendu parlé de cela, j'ai jamais prospecté.
    non puisque ça fera du multi champs directement plus les ressemblances entre les mots, et la recherche sera beaucoup beaucoup beaucoup plus rapide, et puis c'est très simple a mettre en place

  11. #11
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    Désolé de te donner une solution qui va te compliquer la vie.

    Tu ne dois pas mettre tes mots clés dans ta table articles mais plutôt dans une autre table que l'on nommeras mot_cle (par exemple). Et une autre table que l'on nommeras mot_cle_groupe (par exemple)

    Tu passeras d'abord par la création d'un mot clé que tu inséreras dans mot_cle. Et à chaque fois que tu ajouteras un mot clé à un article tu ajouteras un enregistrement dans mot_cle_groupe qui contiendras l'id provenant de mot_cle et l'autre id provenant de articles.

    Ceci pour éviter d'avoir une meilleure gestion des mots clés. Imagine toi un article qui va contenir (php, mysql, postgreql, base de données, apache...) quelle longueur tu dois donner à ce champ?

    Pour la recherche, il te suffira de faire une requête sur mot_cle qui récupère son id ensuite chercher tous les liens dans mot_cle_groupe.

    Si c'est confus, je peux poursuivre... Si c'est faux, je ne suis qu'un humain et j'eSpère que d'autres pourront nous guider.

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