Index
Configuration
Gestion des index
Méthodes
Etude de cas
|
|
Etudes de cas
Telecharger le fichier fulltext.sql
CREATE
TABLE example_fulltext(
idexample_fulltext INTEGER UNSIGNED
NOT NULL AUTO_INCREMENT,
date_texte DATE NOT NULL,
titre
VARCHAR(200) NULL,
auteur INTEGER NOT NULL,
commentaire TINYTEXT NULL,
texte
TEXT NULL,
validite BOOL NULL,
PRIMARY KEY(idexample_fulltext),
FULLTEXT INDEX
example_fulltext_plein(texte, commentaire, titre),
INDEX
example_fulltext_auteur(auteur));
CREATE
TABLE example_auteur(
idexample_auteur INTEGER
UNSIGNED NOT NULL AUTO_INCREMENT,
nomauteur varchar(50));
Nous
allons prendre un exemple simple, deux tables. La première, example_fulltext,
contient des extrais de textes de grands auteurs, la seconde, example_auteur,
contient les noms des auteurs en question.
Commençons
par une requête simple recherchant le mot « mort » dans l’ensemble
des textes
SELECT titre, MATCH (texte, commentaire, titre) AGAINST ('mort') AS
cpt
FROM example_fulltext
ORDER BY cpt DESC
titre |
cpt |
Lettre
à Ménécée |
1.3077735361583 |
De
la Nature |
1.2738213071353 |
Réfutation
d'Helvétius |
0.37034043359479 |
Essais |
0.22855587241584 |
Déclaration
des droits de l'homme et du citoyen |
0 |
La
Politique, livre I, chap. 2 |
0 |
La
Politique, livre III, chap. 6 et 7 |
0 |
Principes
de la philosophie |
0 |
Le
Prince |
0 |
Le
Prince |
0 |
Traité
du vide |
0 |
La
République |
0 |
Du
Contrat social |
0 |
Du
Contrat social |
0 |
Traité
sur la tolérance |
0 |
Lettres
à Lucilius |
0 |
Ajoutons un
filtre permetant de n’extraire que les enregistrements comportant
le mot « mort »
SELECT titre, MATCH (texte, commentaire, titre) AGAINST ('mort') AS
cpt
FROM example_fulltext
WHERE MATCH (texte, commentaire, titre) AGAINST ('mort')
ORDER BY cpt DESC
titre |
cpt |
Lettre
à Ménécée |
1.3077735361583 |
De
la Nature |
1.2738213071353 |
Réfutation
d'Helvétius |
0.37034043359479 |
Essais |
0.22855587241584 |
L’on
peut ajouter les auteurs une jointure.
SELECT
titre, MATCH (texte, commentaire,
titre) AGAINST ('mort') AS
cpt,Nomauteur
FROM
example_fulltext
inner join example_auteur on
auteur = idexample_auteur
WHERE MATCH (texte, commentaire, titre) AGAINST
('mort')
ORDER BY cpt DESC
titre |
cpt |
Nomauteur |
Lettre
à Ménécée |
1.3077735361583 |
Épicure |
De
la Nature |
1.2738213071353 |
HÉRACLITE |
Réfutation
d'Helvétius |
0.37034043359479 |
DIDEROT |
Essais |
0.22855587241584 |
MONTAIGNE |
Maintenant
supposant que l'on veuille savoir quel sont les textes où
se trouvent le mot « mort » associé au mot « peuple » ?
Nous
avons besoin d’utiliser une requête booléenne. Le mode booléen
a été introduit avec la version 4.0.1 de MySql.
SELECT
titre, MATCH (texte, commentaire,
titre) AGAINST ('mort peuple' IN BOOLEAN
MODE) AS cpt
FROM
example_fulltext inner join example_auteur on
auteur = idexample_auteur
WHERE MATCH
(texte, commentaire, titre) AGAINST ('mort peuple' IN BOOLEAN
MODE)
ORDER BY cpt DESC
Réfutation
d'Helvétius |
2 |
Lettre
à Ménécée |
1 |
De
la Nature |
1 |
Essais |
1 |
Si nous voulons
donner plus de poids au mot « mort » alors il faut utiliser
'+mort peuple'.
Essayons
d’autre part de trouver les mots se rapportant au mot « république »
(républicain, républicanisme, …). Il faut alors utiliser l'opérateur
*.
SELECT
titre, Nomauteur
FROM
full.example_fulltext inner join example_auteur on
auteur = idexample_auteur
WHERE MATCH
(texte, commentaire, titre) AGAINST
('répu*' IN BOOLEAN MODE)
titre |
Nomauteur |
Du
Contrat social |
Jean-Jacques
ROUSSEAU |
La
République |
PLATON |
Le
Prince |
Nicolas
MACHIAVEL |
La
Politique, livre III, chap. 6 et 7 |
ARISTOTE |
Le
Prince |
Nicolas
MACHIAVEL |
|