Restrictions avec la recherche en texte intégral
<<<
Paramétrage précis de la recherche en text intégral de MySQL A faire dans la recherche Full-text
>>>

13.6 Recherche en texte intégral ( Full-text ) dans MySQL
13 Fonctions à utiliser dans les clauses SELECT et WHERE
 Manuel de Référence MySQL 4.1 : Version Française

Booléens de recherches en texte intégral
Recherche en texte intégral avec extension de requête
Restrictions avec la recherche en texte intégral
->Paramétrage précis de la recherche en text intégral de MySQL
A faire dans la recherche Full-text

13.6.4 Paramétrage précis de la recherche en text intégral de MySQL

La recherche sur texte entier n'a malheureusement pas encore beaucoup de paramètres modifiables par l'utilisateur, même si l'ajout de certains apparaît très haut dans la liste de tâches. Si vous utilisez MySQL depuis les sources ( Installer MySQL à partir des sources .), vous pouvez mieux contrôler le fonctionnement de la recherche sur texte entier.

La recherche sur texte entier a été paramétrée pour une efficacité de recherche maximale. La modification du comportement par défaut ne fera généralement que diminuer la qualité des résultats des recherches. Il ne faut pas modifier les sources de MySQL sans savoir précisément ce qu'on fait.

  • La taille minimale des mots à indexer est définie dans la variable ft_min_word_len de MySQL. Syntaxe de SHOW VARIABLES . Vous pouvez modifier cette valeur pour celle que vous préférez, puis reconstruire les index FULLTEXT . (Cette variable n'existe que pour la version 4.0 de MySQL) La valeur par défaut de cette option est de 4 caractères. Modifiez la, puis recompilez les index FULLTEXT . Par exemple, si vous souhaitez pouvoir rechercher des mots de 3 caractères, vous pouvez donner à cette variable la valeur suivante dans le fichier d'options :
    
    [mysqld]
    ft_min_word_len=3
    Puis, relancez le serveur et recompilez vos index FULLTEXT .
  • La liste des mots rejetés est définie dans la variable ft_stopword_file . Syntaxe de SHOW VARIABLES . Modifiez le selon vos goûts, reconstruisez vos index FULLTEXT .
  • Le taux de 50% est déterminé par la méthode de pondération choisie. Pour le désactiver, il faut changer la ligne suivante dans myisam/ftdefs.h :
    
    #define GWS_IN_USE GWS_PROB
    
    Par la ligne:
    
    #define GWS_IN_USE GWS_FREQ
    
    Puis recompiler MySQL. Il n'est pas nécessaire de reconstruire les index dans ce cas. Note : en faisant ces modifications, vous diminuez énormément les capacités de MySQL à fournir des valeurs pertinentes pour la fonction MATCH() . Si vous avez réellement besoin de faire des recherches avec ces mots courants, il est préférable de rechercher EN MODE BOOLEEN , lequel ne respecte pas le taux de 50%.
  • Pour changer les opérateurs utilisés pour les recherches booléennes, modifiez la variable système ft_boolean_syntax (disponible depuis MySQL 4.0.1). La variable peut aussi être modifiée durant le fonctionnement du serveur, mais vous devez avoir les droits de SUPER . La recompilation des index n'est pas possible. Variables sytème du serveur décrit les règles de définition de cette variable.
Si vous modifiez des variables d'indexation de textes qui affectent les index (les variables ( ft_min_word_len , ft_max_word_len et ft_stopword_file ), vous devez reconstruire les index FULLTEXT après avoir faire les modifications et relancé le serveur. Pour reconstruire les index, il est suffisant de faire une réparation QUICK :

mysql> REPAIR TABLE tbl_name QUICK;
Si vous utilisez spécifiquement les fonctionnalités IN BOOLEAN MODE , si vous mettez à jour depuis MySQL 3.23 vers 4.0 ou plus récent, il est nécessaire de remplacer aussi les entêtes des index. Pour cela, utilisez l'opération de réparation USE_FRM :

mysql> REPAIR TABLE nom_de_table USE_FRM;
C'est nécessaire, car les recherches booléennes en texte plein requièrent une option dans l'entête qui n'était pas présente en MySQL en version 3.23, et elle n'est pas ajoutée si vous faites une réparation de type QUICK . Si vous tentez une recherche booléenne sans reconstruire l'index comme ceci, la recherche retournera des résultats incorrects.

Notez que si vous utilisez myisamchk pour effectuer une opération qui modifie les index de la table, pour une réparation ou une analyse, les index FULLTEXT sont reconstruits en utilisant la configuration par défaut des index en texte plein, à moins que vous ne les spécifiez autrement. Cela peut conduire à des requêtes qui échouent.

Le problème survient car les valeurs de cette configuration n'est connue que du serveur. Elles ne sont pas stockées dans les fichiers d'index MyISAM . Pour éviter ce problème si vous avez modifié la taille minimale ou maximale des mots, ou encore le fichier de mots interdits, spécifiez les options ft_min_word_len , ft_max_word_len et ft_stopword_file à myisamchk , en donnant les mêmes valeurs que pour mysqld . Par exemple, si vous avez donnez une taille minimale de mot de 3, vous pouvez réparer votre table avec myisamchk :

shell> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI
Pour vous assurer que le serveur et myisamchk utilisent les mêmes valeurs pour les index, vous pouvez les placer dan s les sections [mysqld] et [myisamchk] du fichier d'options :

[mysqld]
ft_min_word_len=3

[myisamchk]
ft_min_word_len=3
Une alternative à l'utilisation de myisamchk est l'utilisation de REPAIR TABLE , ANALYZE TABLE , OPTIMIZE TABLE ou ALTER TABLE . Ces commandes sont effectuées par le serveur, qui connaît la configuration des index en texte plein.

<< Paramétrage précis de la recherche en text intégral de MySQL >>
Restrictions avec la recherche en texte intégral Recherche en texte intégral ( Full-text ) dans MySQL A faire dans la recherche Full-text