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

Requêtes MySQL Discussion :

Gestion de la pertinence avec la commande MATCH sur 1 colonne


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut Gestion de la pertinence avec la commande MATCH sur 1 colonne
    Bonjour,

    j'essaye de faire une requette pour un champ d'autosuggestion mais j'aimerai gérer la pertinence

    je m'explique :
    je fais la recherche dans une seule colonne de ma table mais sur tous les mots de la colonne

    lorsque je tape : mot1 mot2
    j'aimerai qu'il me ressorte tous les résultats qui contiennent entre autre mot1 et/ou mot2 dans cet ordre :

    mot1 puis mot2
    mot2 puis mot1
    mot1 sans mot2
    mot2 sans mot1

    j'utilise pour ce faire la requete MATCH AGAINST

    ça marche très bien lorsque je fait le MATCH sur 2 colonnes (prenom, nom)
    mais lorsque je veux le faire sur 1 seul colonne (metier) l'ordre de pertinence ne fonctionne pas du tout

    j'ai pensé qu'en définissant AGAINST j'arriverai à quelque chose mais ça ne change rien

    voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT 
    current_position AS current_position, 
    MATCH(current_position) AGAINST('+directeur +de +création' IN BOOLEAN MODE) AS relevancy 
    FROM people 
    WHERE MATCH(current_position) AGAINST('directeur de création') 
    ORDER BY relevancy

    "directeur de création" devrait remonté en 1er mais il remonte en dernier

  2. #2
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Ça devrait être possible, mais à condition de ne pas utiliser le "BOOLEAN MODE". Ou alors il faudrait inverser les "MATCH" utilisés dans la clause "WHERE" et le "ORDER BY".

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    j'ai afficher revelancy pour y voir un peu plus clair

    j'en suis arrivé à cette solution qui est la plus proche de ce que je souhaite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT 
    current_position AS current_position, 
    MATCH(current_position) AGAINST('directeur de création' IN BOOLEAN MODE) AS relevancy 
    FROM people 
    WHERE MATCH(current_position) AGAINST('directeur de création' IN BOOLEAN MODE) ORDER BY relevancy DESC, current_position ASC
    mais ce n'ai pas encore ça car cela ne fait pas la différence entre 'mot1 puis mot2' et 'mot2 puis mot1'

    en ne mettant pas 'IN BOOLEAN MODE' revelancy n'est pas arrondi et pourtant j'ai 'mot2 puis mot1' qui remonte avant 'mot1 puis mot2'

  4. #4
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Je dois dire que je ne maitrise pas vraiment la façon dont MATCH donne ses scores... Il me semble bien que Sphinx donne des points pour l'ordre, j'aurais pensé que les FULLTEXT aussi. En tout cas, apparemment, en BOOLEAN MODE c'est sans espoir.

    En cache misère, ceci pourrait le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY relevancy DESC, current_position LIKE 'mot1 %mot2' DESC, current_position ASC
    Et encore, pour bien gérer les espaces, il faudra plutôt une expression régulière (laissée en exercice car je n'ai pas la syntaxe en tête ).

Discussions similaires

  1. Problème avec une commande Java sur Windows
    Par louberlu dans le forum Général Java
    Réponses: 0
    Dernier message: 20/05/2014, 16h38
  2. [Images] Commande convert sur un serveur
    Par amalec78 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 04/02/2011, 10h08
  3. Problème avec la commande vdump sur TRU64
    Par aribault dans le forum Unix
    Réponses: 0
    Dernier message: 16/02/2010, 17h17
  4. [Batch] Gestion de lignes vide avec la commande sed
    Par DeVit dans le forum Scripts/Batch
    Réponses: 18
    Dernier message: 20/10/2009, 19h06
  5. Réponses: 2
    Dernier message: 02/06/2009, 17h54

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