Recherche dans la base et apostrophes

treyze Messages postés 3 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 19 mai 2004 - 26 avril 2004 à 15:57
treyze Messages postés 3 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 19 mai 2004 - 19 mai 2004 à 11:28
Bonjour à tous,

J'ai un souci avec les apostrophes car je fais une recherche FULL TEXT (MATCH...AGAINST dans MySQL 4.0.1).

Si je cherche "arbre", les résultats qui contiennent "l'arbre" ne sont pas renvoyés. En plus, dans MATCH...AGAINST, on ne peut pas utiliser * en début de chaine. Quelqu'un a-t-il eut ce type de problème ?

--------------
A train station is where a train stops. A bus station is where a bus stops. On my PC, I have a workstation... ;-)

4 réponses

Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
26 avril 2004 à 17:33
slt,

t'as essayer avec like '%arbre%'

8-) :-p

Trinita,
0
treyze Messages postés 3 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 19 mai 2004
27 avril 2004 à 15:39
Merci Trinita pour ta réponse.

Le souci, c'est que LIKE ne s'appuie pas sur des index. Et là attention aux temps de réponse !

Mais la réponse a été trouvée : en fait, ça vient directement du parseur de mysql. Il spécifie explicitement que l'apostrophe et le tiret haut ne sont pas des séparateurs de mot.
C'est une partie de code C à changer dans le source de Mysql (4.1.15 ou 18 pour moi). Je n'en dis pas plus pour le moment car ce n'est pas moi qui ai trouvé. Je vais regarder plus en détail comment cela a été fait...

.... Plus de détails dès que possible

merci encore Trinita.
--------------------------------------
A train station is where a train stops. A bus station is where a bus stops. On my PC, I have a workstation... ;-)
0
cs_mikito Messages postés 14 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 8 septembre 2004
5 mai 2004 à 16:59
Salut TReyze, alors là kan j'ai lu ton message, j'ai cru ke mon cauchemard allait s'arreter, mais pas tout à fait :

le post ke tu as mis correspond exactement à ce ke je veux faire depuis kkues jours et ke j'avais à moitié laisser tombé puiske je n'avais pas trouvé de réponses !

Je me doutais bien kil fallait changer la source de MySQL pour la toute derniere version pour dans mon cas laisser le tiret haut comme non séparateur de mot mais pour ke l'apostrophe deviennent un séparateur de mot : mais est ce ke tu as de la doc sur comment changer cette partie de code???

Merci vraiment si tu réponds
0
treyze Messages postés 3 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 19 mai 2004
19 mai 2004 à 11:28
Bonjour,

Desolé pour tout ce retard mais j'avais beaucoup de boulot. Voici la reponse à notre épineux problème :

dans les sources : myisam/ft_parser.c

Le code :

#ifdef HYPHEN_IS_DELIM
#define misc_word_char(X) ((X)=='\'')
#else
#define misc_word_char(X) ((X)=='\'' || (X)=='-')
#endif

devient :

#ifdef HYPHEN_IS_DELIM
#define misc_word_char(X) (0==1)
#else
#define misc_word_char(X) (0==1 || (X)=='-')
#endif

On mets juste que X n'est jamais égal à apostrophe (je savais pas si c'etait 0 ou 1 pour FAUX donc j'ai mis une expression fausse). C'est pas plus compliqué...

Maintenant, je peux utiliser les fonctionnalité de la recherche full text "en français".

En espérant que cela vous aidera... A+ :)

A train station is where a train stops. A bus station is where a bus stops. On my PC, I have a workstation... ;-)
0
Rejoignez-nous