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.
|