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

SQL Procédural MySQL Discussion :

MYSQL 5.6 FULLTEXT caractère +


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué Avatar de obtuli31
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 43
    Points : 132
    Points
    132
    Par défaut MYSQL 5.6 FULLTEXT caractère +
    Bonjour,

    J'essaie de faire du fulltext, ça à l'air de marcher sauf pour certains textes.

    J'ai dans un champ d'une table des textes "ref++" , je n'arrive pas à trouver la syntaxe dans AGAINST

    +ref++ renvoi une erreur et +"ref++" renvoi bien le texte ref++ mais aussi les textes contenant "ref.."

    Je maîtrise pas bien ce qu'il faut faire pour prendre en considération les "lettres" + et n'avoir en retour que la ligne contenant ref++

    une idée ?

    merci

    OB

  2. #2
    Membre régulier Avatar de monaka
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 64
    Points : 107
    Points
    107
    La rigueur vient toujours à bout de l'obstacle.
    Les détails font la perfection, et la perfection n'est pas un détail.

    J'avais une charrette tirée par des chevaux, mais j'ai acheté une voiture avec un moteur.
    Est-ce que je dois tout le temps rouler avec le moteur, ou est-ce que je peux atteler mes chevaux à la voiture de temps en temps ?

  3. #3
    Membre habitué Avatar de obtuli31
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 43
    Points : 132
    Points
    132
    Par défaut
    Merci pour ta réponse; élas je n'ai rien trouvé qui explique comment utiliser des caractères réservés comme *.

    Cordialement

    OB

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Bonjour voisin !

    D'une manière générale, on échappe les caractères qui peuvent prêter à confusion avec un antislash.

    Pouvez-vous nous donner votre requête et un exemple de données pour qu'on puisse analyser ça de plus près ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre habitué Avatar de obtuli31
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 43
    Points : 132
    Points
    132
    Par défaut Recherche full text HELP
    Bonjour,

    Merci de participer à la discussion.

    Je commence à craquer car par mal de choses ne fonctionnent pas et mon client commence à perdre patiente.

    dans des varchar, il y a du texte comme Ref++ (pour signaler l'importance de la référence)
    mais un match MATCH(titre,reference,resume) AGAINST('+ref++' in boolean mode)
    Error Code: 1064. syntax error, unexpected '+' 0.000 sec

    Mais pire le texte : "Référence du 20/06/2009" :
    MATCH(titre,reference,resume) AGAINST('+20/06/2009' in boolean mode) ne renvoi pas de ligne alors qu'il existe bien la chaîne 20/06/2009
    pas plus que AGAINST('"20/06/2009"' in boolean mode)

    AGAINST('+20/06/2009*' in boolean mode) renvoi tout ce qui contient 20 ou 06 ....

    Une aide serait la bienvenue

    merci

    OB

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Bonjour voisin,

    Petits tests chez moi, à un petit kilomètre de chez vous...

    1) Création d'une table de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `test_fulltext` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `texte` varchar(50) NOT NULL,
     PRIMARY KEY (`id`),
     FULLTEXT KEY `texte` (`texte`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
    2) Insertion de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO `test_fulltext` (`id`, `texte`) VALUES
    (1, 'Ceci est une Ref++ dont il faut tenir compte'),
    (2, 'ceci est un texte en date du 19/12/2017 au soir'),
    (3, 'Texte comportant le mot référence sans plus'),
    (4, 'Texte avec une date au format SQL 2017-12-01'),
    (5, 'Texte avec Ref+ mais pas plus');
    3) Ajout d'un index FULLTEXT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE `test_fulltext`
      ADD PRIMARY KEY (`id`),
      ADD FULLTEXT KEY `texte` (`texte`);
    4) Requête pour chercher 'Ref++'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `test_fulltext` WHERE MATCH (texte) AGAINST ('+Ref++')
    => 1 Ceci est une Ref++ dont il faut tenir compte
    5 Texte avec Ref+ mais pas plus


    5) Requête pour chercher la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `test_fulltext` WHERE MATCH (texte) AGAINST ('+19/12/2017')
    => 2 ceci est un texte en date du 19/12/2017 au soir
    4 Texte avec une date au format SQL 2017-12-01


    Pas trouvé d'autre syntaxe qui fonctionne mieux (qui exclut le "Texte avec une date au format SQL 2017-12-01"), même en échappant les slashes.
    Peut-être une piste donnée dans une réponse ici.

    Il faut apparemment modifier la table pour considérer les caractères / et + comme des caractères de mots.

    Sinon vous avez la solution REGEXP... mais bon courage pour trouver la bonne expression régulière à construire par le programme !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut obtuli31.

    Quand on ne sait pas, on commence par lire la documentation MySql : https://dev.mysql.com/doc/refman/5.7...xt-search.html

    Citation Envoyé par obtuli31
    J'essaie de faire du fulltext, ça à l'air de marcher sauf pour certains textes.
    Le Full Text Search est fait pour effectuer des recherches sur des mots.
    Un mot est composé de lettre ou de chiffre.
    En ce qui concerne les caractères spéciaux, il se peut que vous ayez des comportements bizarre.
    Surtout si vous utilisez les caractères spéciaux du "Full Text Search", comme le "+" et le "-".

    Pour effectuer la recherche, faites en sorte d'avoir le même charset entre la table et votre script. Idem pour le collate !
    Avez-vous utilisé un collate sensible à la casse ou pas ?

    Il y a tout un paramtrage à faire dans votre fichier "my.ini" avant de se lancer dans le "Full Text Search". L'avez-vous fait ?
    Et quand est-il du fichier "stopword" ? A-t-il été créé et qu'avez-vous mis dedans ? J'espère pour vous que c'est bien du français que vous utilisez.

    Vous n'avez pas précisé si votre table a été créé avec le moteur InnoDB ou le moteur MyIsam ?

    Il existe plusieurs modes de recherches :
    --> langage natuel
    --> booléennes
    --> WITH QUERY EXPANSION

    Laquelle utilisez-vous ?

    Citation Envoyé par obtuli31
    J'ai dans un champ d'une table des textes "ref++" , je n'arrive pas à trouver la syntaxe dans AGAINST
    On ne dit pas champs, mais colonne !

    Puisque vous utilisez des caractères spéciaux, vous devez utiliser le mode de recherche booléen.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT  *
      FROM  `votre_table`
     WHERE  MATCH (text1,text2) AGAINST ('+mot1 -mot2' IN BOOLEAN MODE);
    Dans cet exemple, la requête va récupérer toutes les lignes ayant présent le mot "mot1" mais ne contenant pas le mot "mot2".
    --> https://dev.mysql.com/doc/refman/5.7...t-boolean.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. [Batch] Dump mysql en batch avec caractère non pris en charge (:)
    Par dimitrifrom31 dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 06/09/2014, 23h16
  2. FULLTEXT & caractère TIS-620 (thai)
    Par WeedYWS dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 17/01/2013, 18h26
  3. [MySQL] Mysql/php et les caractères arabes (réglé)
    Par samad dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/08/2009, 19h31
  4. MySql Requete remplacer un caractère
    Par Lebas dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/10/2006, 10h38
  5. [MySQL] Export de mysql 4.1 puis import sur mysql 4.0 : les caractères accentués ne passent p
    Par Kiyomizu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 08h36

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