Bonjour,
Pour le développement d'un système de gestion documentaire, j'implémente un module de recherche de documents.
Pour cela, j'ai la table en MySQL (version 5) suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
CREATE TABLE `files` (
`FILE_ID` int(11) NOT NULL auto_increment,
`AUTHOR` varchar(65) collate latin1_general_ci default NULL,
`TYPIST` varchar(65) collate latin1_general_ci default NULL,
`CREATION_DATE` date default NULL,
`PUB_DATE` date NOT NULL default '0000-00-00',
`FILESIZE` int(6) default NULL,
`PATH` varchar(255) collate latin1_general_ci NOT NULL,
`VERSION` varchar(16) collate latin1_general_ci NOT NULL default '1.0',
PRIMARY KEY (`FILE_ID`),
KEY `FK_MATCHES` (`RES_ID`),
KEY `FK_ON` (`DOCSERVER_ID`),
FULLTEXT KEY `FT_AUTHOR` (`AUTHOR`),
FULLTEXT KEY `FT_TYPIST` (`TYPIST`),
FULLTEXT KEY `FT_AUTHOR_TYPIST` (`AUTHOR`,`TYPIST`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci |
Une partie du contenu de la table est la suivante :
1 2 3 4 5 6 7 8 9 10 11 12
| +--------+-----------------+-----------------+---------------+------------+
| RES_ID | AUTHOR | TYPIST | CREATION_DATE | PUB_DATE |
+--------+-----------------+-----------------+---------------+------------+
| 1 | Inconnu | Léquipé Perrine | 2006-07-18 | 2007-05-21 |
| 6 | Perrine Léquipé | Léquipé Perrine | 2007-04-04 | 2007-05-21 |
| 5 | Perrine Léquipé | Léquipé Perrine | 2007-04-04 | 2007-05-21 |
| 7 | Perrine Léquipé | Léquipé Perrine | 2007-04-04 | 2007-05-21 |
| 8 | Perrine Léquipé | Léquipé Perrine | 2007-05-21 | 2007-05-22 |
| 9 | Perrine Léquipé | Léquipé Perrine | 2005-02-15 | 2007-05-22 |
| 10 | Inconnu | Léquipé Perrine | 2006-07-17 | 2007-05-23 |
| 11 | Perrine Lequipe | Léquipé Perrine | 2007-05-20 | 2007-05-23 |
+--------+-----------------+-----------------+---------------+------------+ |
Note : il y a volontairement pas d'accent à "Léquipé" pour la resource 11 pour AUTHOR.
Le soucis, c'est que si j'effectue une recherche sur l'auteur (AUTHOR) par exemple comme ceci :
select ... from files as f where match(f.AUTHOR) against('inconnu') limit 0,101
Il me retourne bien :
1 2 3 4 5 6
| +--------+---------+---------------+
| RES_ID | AUTHOR | CREATION_DATE |
+--------+---------+---------------+
| 1 | Inconnu | 2006-07-18 |
| 10 | Inconnu | 2006-07-17 |
+--------+---------+---------------+ |
Mais si ma requête est :
select ... from files as f where match(f.AUTHOR) against('Perrine') limit 0,101
ou
select ... from files as f where match(f.AUTHOR) against('Léquipé') limit 0,101
ou
select ... from files as f where match(f.AUTHOR) against('Perrine Léquipé') limit 0,101
Il n'y AUCUN résultat.
Avec
select ... from files as f where match(f.AUTHOR) against('lequipe') limit 0,101
On a :
1 2 3 4 5
| +--------+-----------------+---------------+
| RES_ID | AUTHOR | CREATION_DATE |
+--------+-----------------+---------------+
| 11 | Perrine Lequipe | 2007-05-20 |
+--------+-----------------+---------------+ |
Ça me semble pas très logique ... on dirait qu'il y a un problème avec les accents ! ??
De plus, pour la ressource n°11, l'auteur est "Perrine Lequipe" et il trouve avec "Lequipe" mais pas "Perrine" !!!
C'est incompréhensible ...
Si quelqu'un a une idée du pourquoi du comment, je suis preneuse !
Merci d'avance.
Partager