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 (See Section 2.4, « Installation de MySQL avec une distribution source ».), 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. See
Section 13.5.3.18, « 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
. See
Section 13.5.3.18, « 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.
Section 5.2.3, « Variables serveur système » 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.