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 :

Recherche Fulltext et poids d'un résultat


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut Recherche Fulltext et poids d'un résultat
    Bonjour à tous,

    Je réalise un moteur de recherche interne pour notre site et je bloque sur la pertinence des résultats.

    Ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE `itmmaster` (
      `itmref` varchar(20) NOT NULL,
      `itmdes1` varchar(30) DEFAULT NULL,
      `itmdes2` varchar(30) DEFAULT NULL,
      `itmdes3` varchar(30) DEFAULT NULL,
      `eancod` varchar(13) DEFAULT NULL,
      `itmsta` int DEFAULT NULL,
      `rplitm` varchar(20) DEFAULT NULL,
      `xsap` varchar(13) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    ALTER TABLE `itmmaster` ADD PRIMARY KEY (`itmref`);
    ALTER TABLE `itmmaster` ADD FULLTEXT KEY `itmref` (`itmref`,`eancod`,`itmdes1`,`itmdes2`,`itmdes3`);
    Quelques données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO `itmmaster` (`itmref`, `itmdes1`, `itmdes2`, `itmdes3`, `eancod`, `itmsta`, `rplitm`, `xsap`) VALUES
    ('2-87057', 'CLES MIXTES DIAM 7', '', '', '3253562870575', 6, ' ', ''),
    ('2-87058', 'CLES MIXTES DIAM 8', '', '', '3253562870582', 6, '4-87058', ''),
    ('2-87066', 'CLES MIXTES DIAM 6', '', '', '3253562870667', 6, ' ', ''),
    ('2-87069', 'CLES MIXTES DIAM 9', '', '', '3253562870698', 6, ' ', ''),
    ('2-87070', 'CLES MIXTES DIAM 10', '', '', '3253562870704', 6, ' ', ''),
    ('2-87071', 'CLES MIXTES DIAM 11', '', '', '3253562870711', 6, ' ', ''),
    ('2-87072', 'CLES MIXTES DIAM 12', '', '', '3253562870728', 6, ' ', ''),
    ('2-87073', 'CLES MIXTES DIAM 13', '', '', '3253562870735', 6, ' ', ''),
    ('2-87074', 'CLES MIXTES DIAM 14', '', '', '3253562870742', 6, ' ', ''),
    ('2-87075', 'CLES MIXTES DIAM 15', '', '', '3253562870759', 6, ' ', '');
    Ma requête de recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
      *, 
      MATCH(itmdes1, itmdes2, itmdes3, itmref, eancod) AGAINST ('cles mixtes diam 12') AS result
    FROM itmmaster 
    WHERE 
      MATCH(itmdes1, itmdes2, itmdes3, itmref, eancod) AGAINST ('cles mixtes diam 12') AND 
      itmsta IN (1,2,3,4,6) 
    ORDER BY result DESC
    Résultat de ma requête

    itmref itmdes1 itmdes2 itmdes3 eancod itmsta rplitm xsap result
    2-87057 CLES MIXTES DIAM 7 3253562870575 6 11.24915885925293
    2-87058 CLES MIXTES DIAM 8 3253562870582 6 4-87058 11.24915885925293
    2-87066 CLES MIXTES DIAM 6 3253562870667 6 11.24915885925293
    2-87069 CLES MIXTES DIAM 9 3253562870698 6 11.24915885925293
    2-87070 CLES MIXTES DIAM 10 3253562870704 6 11.24915885925293
    2-87071 CLES MIXTES DIAM 11 3253562870711 6 11.24915885925293
    2-87072 CLES MIXTES DIAM 12 3253562870728 6 11.24915885925293
    2-87073 CLES MIXTES DIAM 13 3253562870735 6 11.24915885925293
    2-87074 CLES MIXTES DIAM 14 3253562870742 6 11.24915885925293
    2-87075 CLES MIXTES DIAM 15 3253562870759 6 11.24915885925293
    2-87076 CLES MIXTES DIAM 16 3253562870766 6 11.24915885925293

    La recherche m'a bien renvoyé des résultats mais toute les lignes ont le même poids alors que je m'attendais à voir la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2-87072 | CLES MIXTES DIAM 12 |  |  | 3253562870728 | 6 |   |  | 11.24915885925293
    En premier puis les autres.

    Je ne peux pas passer en mode boolean car la recherche doit être effective sur la colonne itmref et malheureusement les données contiennent des -.

    Est-ce que je suis passé à côté d'une subtilité ?

    Merci d'avance.

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 231
    Points : 82
    Points
    82
    Par défaut
    Je me réponds à moi même.

    A priori les mots de moins de 4 caractères ne sont pas pris en compte :

    Citation Envoyé par https://www.mysqltutorial.org/mysql-natural-language-search.aspx
    The minimum length of the search term defined in MySQL full-text search engine is 4. It means that if you search for the keyword whose length is less than 4 e.g., car, cat, you will not get any results.
    Ce paramètre est modifiable via le fichier de config de mysql (http://blogs.reliablepenguin.com/201...ulltext-search) mais comme je suis sur un hébergement mutualisé je n'y ai pas accès dommage

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 782
    Points : 52 783
    Points
    52 783
    Billets dans le blog
    5
    Par défaut
    Et en plus, plus tu descend ce paramètre et plus MySQL qui est un veau devient un escargot !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [MySQL] Résultats de recherche fulltext etrange
    Par Idleman dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/05/2012, 13h13
  2. recherche Fulltext ne retourne pas les bons résultats
    Par gmic7 dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/12/2011, 15h06
  3. Recherche FullText, de mauvais résultats :(
    Par Matth_S dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 23/04/2010, 11h27
  4. Réponses: 3
    Dernier message: 28/03/2008, 14h48
  5. Réponses: 5
    Dernier message: 05/06/2007, 16h37

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