Bonjour voisin,
Petits tests chez moi, à un petit kilomètre de chez vous...
1) Création d'une table de test
1 2 3 4 5 6
| CREATE TABLE `test_fulltext` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`texte` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `texte` (`texte`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |
2) Insertion de données
1 2 3 4 5 6
| INSERT INTO `test_fulltext` (`id`, `texte`) VALUES
(1, 'Ceci est une Ref++ dont il faut tenir compte'),
(2, 'ceci est un texte en date du 19/12/2017 au soir'),
(3, 'Texte comportant le mot référence sans plus'),
(4, 'Texte avec une date au format SQL 2017-12-01'),
(5, 'Texte avec Ref+ mais pas plus'); |
3) Ajout d'un index FULLTEXT
1 2 3
| ALTER TABLE `test_fulltext`
ADD PRIMARY KEY (`id`),
ADD FULLTEXT KEY `texte` (`texte`); |
4) Requête pour chercher 'Ref++'
SELECT * FROM `test_fulltext` WHERE MATCH (texte) AGAINST ('+Ref++')
=> 1 Ceci est une Ref++ dont il faut tenir compte
5 Texte avec Ref+ mais pas plus
5) Requête pour chercher la date
SELECT * FROM `test_fulltext` WHERE MATCH (texte) AGAINST ('+19/12/2017')
=> 2 ceci est un texte en date du 19/12/2017 au soir
4 Texte avec une date au format SQL 2017-12-01
Pas trouvé d'autre syntaxe qui fonctionne mieux (qui exclut le "Texte avec une date au format SQL 2017-12-01"), même en échappant les slashes.
Peut-être une piste donnée dans une réponse ici.
Il faut apparemment modifier la table pour considérer les caractères / et + comme des caractères de mots.
Sinon vous avez la solution REGEXP... mais bon courage pour trouver la bonne expression régulière à construire par le programme !
Partager