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 :

ft_min_word_len = 3 non respecté sur table InnoDB chez OVH


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut ft_min_word_len = 3 non respecté sur table InnoDB chez OVH
    Bonjour,

    Recherche texte libre via requête PHP :

    WHERE MATCH($champ) AGAINST('$text' IN BOOLEAN MODE)

    chez OVH : Mutu avec SQL privé.

    Table MyISAM cela marchait très bien sauf que par défaut ft_min_word_len = 4.
    Or je veux 3, les mots de 3 lettres voivent être pris en compte, par exemple "hub usb"
    Autrefois il était possible de changer cette valeur par le manager OVH.
    Aujourd'hui il faut faire la demande au support, cela prend plusieurs mails, plusieurs coups de téléphone et plusieurs jours. Et à chaque mois il faut recommencer car je suppose qu'ils réinitialient leurs réglages.

    OVH m'a demandé de passer la table en InnoDB car la valeur par défaut est 3.

    J'ai passé la table à la fois en UTF-8 et en InnoDB.

    Actuellement
    hub usb -> 28 produits répondent à votre demande.// BON
    hub usb a -> Désolé, aucun produit ne correspond au texte « hub usb a »

    Cela signifie que "a" est considéré comme un motif de recherche, comme si ft_min_word_len = 1.

    Le support d'OVH m'assure que ft_min_word_len est à 3.

    Si je vais dans ma nouvelle table UTF-8 en InnoDB

    SHOW VARIABLES LIKE '%ft_min_word_len%';
    ft_min_word_len 4

    Donc OVH dit que c'est 3, PHPMyAdmin dit que c'est 4 et dans la réalité c'est 1.

    Avez-vous une piste ?
    Le passage en UTF-8 peut-il poser ce genre de problème ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 544
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Comme mentionné dans le manuel de référence, les paramètres ne sont pas les mêmes pour le moteur INNODB et le moteur MYISAM

    Extrait du manuel de référence MySQL 8.0 :

    Configuring Minimum and Maximum Word Length
    The minimum and maximum lengths of words to be indexed are defined by the innodb_ft_min_token_size and innodb_ft_max_token_size for InnoDB search indexes, and ft_min_word_len and ft_max_word_len for MyISAM ones.
    Documentation complète ici
    https://dev.mysql.com/doc/refman/8.0...ne-tuning.html


    Par ailleurs, MyISAM est un moteur complètement obsolète, qui ne gère notamment pas l'intégrité référentielle... À fuir comme la peste !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjour,

    Merci de ton suivi.

    Dans PHPMyAdmin.

    SHOW VARIABLES LIKE '%innodb_ft_min_token_size%';
    innodb_ft_min_token_size : 3

    SHOW VARIABLES LIKE '%innodb_ft_max_token_size%';
    innodb_ft_max_token_size : 84

    Ces réglages semblent corrects et pourtant j'ai toujours le même problème comme si innodb_ft_min_token_size = 1

    J'ai redémarrer la BD mais cela ne change rien.

    Je sais que REPAIR ne fonctionne pas pour une table innodb.

    N'y a-t-il pas quelque chose à faire au niveau des champs de l'index ?


    Dans la doc j'ai trouvé :

    Rebuilding InnoDB Full-Text Indexes

    For the changes to take effect, FULLTEXT indexes must be rebuilt after modifying any of the following full-text index variables: innodb_ft_min_token_size; innodb_ft_max_token_size; innodb_ft_server_stopword_table; innodb_ft_user_stopword_table; innodb_ft_enable_stopword; ngram_token_size. Modifying innodb_ft_min_token_size, innodb_ft_max_token_size, or ngram_token_size requires restarting the server.

    To rebuild FULLTEXT indexes for an InnoDB table, use ALTER TABLE with the DROP INDEX and ADD INDEX options to drop and re-create each index.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 544
    Billets dans le blog
    10
    Par défaut
    Et du coup c'est toujours inopérant après rebuild des index ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjour,

    Merci de ton suivi.

    J'attends le retour du spécialiste BD pour lui laisser effectuer cette opération en toute sécurité.

    Si c'est très simple et bien documenté je peux le faire moi-même.
    Si tu connais une bonne source merci de l'indiquer.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 544
    Billets dans le blog
    10
    Par défaut
    La référence c'est, comme son nom l'indique, le "manuel de référence MySQL" dont voici le lien pour la V8.0 :

    https://dev.mysql.com/doc/refman/8.0...ng-tables.html

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjou escartefigue,

    Merci de ton suivi.

    Cette documentation n'est pas très pédagogique pour les commandes à passer via PHPMyAdmin.

    Un peu peur de planter ma table, pour l'instant j'attends notre expert.

    Je vous tiens informés.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjour,

    Donc j'ai détruit tous les index.

    Puis je les ai recréés à l'identique FULLTEXT.

    Puis j'ai redémarré le serveur.

    Et j'ai toujours le même problème :

    hub usb -> 28 produits répondent à votre demande.// BON
    hub usb a -> Désolé, aucun produit ne correspond au texte « hub usb a »

    SHOW VARIABLES LIKE '%innodb_ft_min_token_size%';
    innodb_ft_min_token_size : 3

    Un peu énervant.

    Avez-vous des idées ?

    Merci d'avance.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjour,

    J'ai l'impression que la différence est :

    Code MyISAM : Sélectionner tout - Visualiser dans une fenêtre à part
    ft_min_word_len = 3
    Les mots de moins de 3 lettres sont exclus par SQL

    Code Innodb : Sélectionner tout - Visualiser dans une fenêtre à part
    innodb_ft_min_token_size=3
    Les mots de moins de 3 lettres sont considérés comme une erreur par SQL, la requête n'est pas exécutée.

    Donc les mots de moins de 3 lettres doivent être éliminés en amont par PHP.

    Qu'en pensez-vous ?

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 544
    Billets dans le blog
    10
    Par défaut
    Ce serait étonnant, mais si c'est le cas, il doit y avoir un message d'erreur dans la log

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjour,

    Il n'y a pas de message d'erreur.

    Mais vois-tu une autre explication ?

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 544
    Billets dans le blog
    10
    Par défaut
    Malheureusement je n'ai pas de serveur MySQL sous la main pour tester, seulement un DB fiddle

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    718
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 718
    Par défaut
    Bonjour,

    Pas de souci.

    Merci de ton suivi.

Discussions similaires

  1. Problème de concurrence sur table InnoDB
    Par MonsieurPoulet dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/09/2013, 11h21
  2. [AC-2003] DAO/ADOX: Keys.Append non géré sur tables attachées ?
    Par jax54000 dans le forum Modélisation
    Réponses: 7
    Dernier message: 21/03/2010, 19h58
  3. Effacement de colonne impossible sur table InnoDB volumineuse
    Par jvanbouc dans le forum Administration
    Réponses: 11
    Dernier message: 14/01/2010, 16h04
  4. Réponses: 1
    Dernier message: 08/03/2008, 17h25
  5. texte qui ce répète et Height non respecté sur IE6
    Par Strix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/04/2007, 16h16

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