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

Langage PHP Discussion :

Du fulltext sur du Like pour donner de la valeur au mot clef


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut Du fulltext sur du Like pour donner de la valeur au mot clef
    Hello,

    Suite à une recherche en fulltext qui ne retourne aucun résultat, je souhaite switcher en LIKE, mon problème est que je n'arrive pas donner de la valeur sur l'affichage des résultats.

    En somme dans cet exemple, il va afficher les résultats par ordre du nom du site (nomsite) (tout simplement et cela fonctionne)

    Ce que je souhaiterais, c'est d'afficher le résultat par nombre de mots clefs trouvés..

    ma recherche (bidon) "cinéma golf rouge montre foot" => elle ne donne rien en full text, je switch sur mon LIKE et j'aimerais
    qu'il affiche le résultat par site qui ont le plus de ces mots clefs dans le nom du site, la description et les mots-clefs.

    Si je comptabilise, disons que le site "Horlogerie" à

    3x cinéma entre le nom du site, la description et les mots clefs
    1x golf entre le nom du site, la description et les mots clefs
    2x rouge entre le nom du site, la description et les mots clefs
    4x montre entre le nom du site, la description et les mots clefs
    0x foot entre le nom du site, la description et les mots clefs

    Total comptabilisé : 3+1+2+4 = 10 mots clefs trouvés

    le site "Trucbijoux" ne comptabilise que 6 mots clefs trouvés
    etc....

    L'affichage serait dans l'ordre

    1) Horlogerie
    2) Trucbijoux

    etc...

    Voilà le bout de code actuel


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $motsy = explode( " ", $mots );
    if( count( $motsy ) > 0 ) {
     
       $query = "SELECT * FROM $tableannu WHERE ";
       for( $i = 0; $i < count( $motsy ); $i++ ) {
          $query .= "nomsite LIKE '%". $motsy[$i] ."%' OR description LIKE '%". $motsy[$i] ."%' OR mcles LIKE '%". $motsy[$i] ."%'";
          if( $i < count( $motsy ) - 1 )
             $query .= " OR ";
       }
       $query .= " AND pays='0' ORDER BY nomsite ASC LIMIT 0,10";
       $reponse = mysql_query( $query ) or die( mysql_error() );
    S'il existe un autre moyen de donner de la valeur sur le nombre de mots clefs trouvés, je suis preneur..

    Cordialement
    Yule

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Pourquoi ne pas essayer plutôt de résoudre ton problème de full text ?
    Parce que à mon avis ça sera beaucoup plus simple de faire ça en full text, vu que c'est fait pour...

  3. #3
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Hello,

    Je n'ai pas de problème avec mon fulltext, c'est juste que le full text est assez limité si la syntaxe du mot n'est pas exactement écrit la même chose...

    D'ou le fait de passer sur du like quand la pertinence du fulltext est presque à 0

    Merci pour vos solutions
    Cordialement
    Yule

  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
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Il y a une autre condition dans la requête : AND pays='0'
    Du coup, est ce que pour les 4 lignes manquantes le pays vaut 0 ?

    Aussi, as tu essayé de repérer les 4 manquants, et voir s'il y aurait pas quelque chose de particulier par rapport au mot clé (un espace, caractère spéciaux, casse, etc ...) ?
    Sont ils réellement identiques en somme ?

  5. #5
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    re,

    Il y a une autre condition dans la requête : AND pays='0'
    Du coup, est ce que pour les 4 lignes manquantes le pays vaut 0 ?
    OUI

    Aussi, as tu essayé de repérer les 4 manquants, et voir s'il y aurait pas quelque chose de particulier par rapport au mot clé (un espace, caractère spéciaux, casse, etc ...) ?
    Sont ils réellement identiques en somme ?
    J'ai pas compris désolé.. J'ai pas de soucis de ce coté

    En fait j'indexe sur un site soumis, un titre, une description et une liste de mots clefs.


    J'aimerais pouvoir comptabiliser le nombre de fois ou sont retrouver l'ensemble des mots clefs d'une recherche (tous ou au moins un) exemple "cinéma golf rouge montre foot"

    Dans ma bd, il va regarder le nombre de fois ou il trouve 1 ou plusieurs de ces mots clefs (d'un formulaire de recherche) sur le champs nomsite, description et mcles, un fois comptabilisé, je devrais avoir un chiffre qui représente le nb de fois qu'il a compté ces termes de la recherche, celui qui en aura le plus, sera affiché en premier.

    dur dur même pour l'expliquer.. rire

    Cordialement
    Yule

  6. #6
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    dur dur même pour l'expliquer.. rire
    En faite, j'avais pas compris.

    Et bien là, j'ai jamais essayé de faire un truc pareil, et comme ça, et je ne crois pas qu'il existe une instruction SQL retournant ces informations.

    En gros, tu veux savoir quels sont les mots clés qui ont permis de récupérer les lignes, et le nombre de lignes qu'ils ont permis de récupérer, et la somme de tout ça donne le nombre de ligne total récupéré.

    A part lancer autant de requêtes SQL qu'il y a de mots clés (au lieu de faire des OU successifs), je ne vois pas.
    A part faire des sous requêtes, un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (SELECT COUNT (*) FROM table WHERE champ1 LIKE '%mot_clé%') AS total_mots_champ1
    FROM table
    WHERE champ1 LIKE '%mot_clé%'
    Mais ça revient au même que de lancer chaque sous requête individuellement il me semble.

    Ou alors, à coup de regex en Php sur les valeurs des champs concernés.


    Un peu compliqué ce que tu veux faire, de plus, ça risque d'être très gourmand en ressource tout ça.
    L'idée me semble très intéressante ceci dit.
    Espérons que d'autres ont de meilleures idées.

  7. #7
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Citation Envoyé par yule Voir le message
    ma recherche (bidon) "cinéma golf rouge montre foot" => elle ne donne rien en full text, je switch sur mon LIKE et j'aimerais
    qu'il affiche le résultat par site qui ont le plus de ces mots clefs dans le nom du site, la description et les mots-clefs.
    Tu as spécifié dans ta requêtes fulltext que tous les mots ne doivent pas être trouvés obligatoirement ?

  8. #8
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Hello,

    Non je l'ai pas spécifié puisque que le full text est d'office plus rigoureux, c'est à dire que si je cherche le terme => Pomme

    Il va me retourner une valeur pertinente...
    si je tape pome => il ne va rien me trouver...
    si je tape pom* avec le le boléan = il va m'afficher l'ensemble des termes qui commence par "pom" et donc moins pertinent...

    C'est pour cela que je switch sur du like, le visiteur ne s'ammuse pas à corriger sa recherche en y ajoutant ce boléan * ou + ou - comme cela est indiqué ici http://dev.mysql.com/doc/refman/5.0/...t-boolean.html

    Avez-vous une idée ?

    Donc autre piste... c'est possible de définir une valeur pour afficher l'ordre d'affichage selon ou est trouvé le ou les mots clefs

    Donc si cherche "pome d'adam" (ecrit faux volontairement)

    "pome" se trouve dans le champs "titre" = 3points
    "pome" se trouve dans le champs "description" = 2 points

    "adam" se trouve dans le champs "titre" = 2 points
    "adam" se trouve dans le champs "description" = 1 point

    Total de point pour cette ligne : 8 points et ainsi de suite

    Ce qui me permettrai d'afficher un ordre d'affichage autre que par l'id ou la date dans le résultat de ma recherche par LIKE

    Bon peut-être que je vois tout faux et qu'il existe une alternative avec le full Text sans switcher sur du like...

    Merci pour vos avis et votre aide
    Cordialement
    Yule

Discussions similaires

  1. Fichier IMG à graver sur une disquette pour windows
    Par jean christophe dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/04/2005, 15h41
  2. Réponses: 15
    Dernier message: 28/01/2005, 04h46
  3. Configuration des disques sur un serveur pour Oracle
    Par hkhan dans le forum Administration
    Réponses: 5
    Dernier message: 29/09/2004, 12h57
  4. Réponses: 7
    Dernier message: 13/12/2003, 14h09

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