IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)


MYSQL et la recherche textuelle

30/04/2003

Par "Olivier Miossec" (omiossec)

MYSQL et la recherche textuelle

Index
Configuration
Gestion des index
Méthodes
Etude de cas

 

Configuration

La recherche pleine texte existe dans MySql depuis la version 3.23.23. Elle a connut une nette amélioration avec la version 4. Par défaut  il ne nécessite pratiquement  pas d’administration.

En effet seul les versions   4.0.10 et supérieur de MySql permettent de contrôler le comportement de la recherche textuelle. Cinq variables sont à la disposition de l’administrateur.

ft_boolean_syntax

Opérateur autorisé pour une  recherche en mode booléen.

ft_min_word_len

Taille minimum des mots indexés, par défaut 4 char

ft_max_word_len

Taille maximum des mots indexés, par défaut 254 char

ft_max_word_len_for_sort

Définit la taille maximum des mots à indexer lors des opérations de réparation d’index.

ft_stopword_file

Fichier listant les mots à ne pas indexer  (articles, propositions,…),  à placer dans le répertoire de base de MySql. Une chaîne vide permet de ne pas utiliser de liste, ce qui n’est pas forcement conseillé.

La modification d’une ou plusieurs options oblige à reconstruire les index de recherche textuelle.

La reconstruction des index « full text » s’effectue suivant deux méthodes distinctes. Vous pouvez supprimer l’index « full text » sur la table plus le recréer. Soit pour des tables très importantes utiliser REPAIR TABLE Nom de la table  EXTENDED.

Enfin pour toutes les versions de mysql supportant la recherche textuelle peut être recompiler pour prendre en compte une liste de mot interdis personnalisée. Cela ce fait en modifiant le fichier ‘myisam/ft_static.c’.

/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB */

#ifdef COMPILE_STOPWORDS_IN
/* This particular stopword list was taken from SMART distribution
ftp://ftp.cs.cornell.edu/pub/smart/smart.11.0.tar.Z
it was slightly modified to my taste, though
*/

  "a",
"a's",
"able",

  "yourself",
"yourselves",
"z",
"zero"

#endif

Pour pouvoir ajouter ou modifier des mots dans cette liste il suffit de rajouter le mot entre doubles cotes  « "de", ».

La désactivation de l’option de trie stoppant la recherche si un mot renvoi plus de la moitié des lignes dans la table se fait en remplaçant l’option GWS_PROB par GWS_FREQ sur la définition de la variable GWS_IN_USE  dans le fichier 'myisam/ftdefs.h' ce qui demande la aussi une compilation.

/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB */

#define NORM_IN_USE                         NORM_PIVOT
#define GWS_IN_USE                          GWS_PROB

/*==============================================================*/

#define LWS_TF                                      (count)
#define LWS_BINARY                          (count>0)

De même il est possible de modifier la limite supérieure de la taille des mots à indexer. Dans 'myisam/fulltext.h' modifier la définition suivante « #define HA_FT_MAXLEN 254 ».