2010-08-05 6 views
1

Je reçois des résultats difficiles à comprendre. J'espère que quelqu'un pourra éclairer un peu le sujet.Recherche plein texte dans Mysql - comportement illogique

J'ai une table très simple dans une base MySQL:

 
id| text 
1 | testA testB testC 
2 | testA testB 

Quand je lance la requête suivante:

SELECT id, MATCH (text) AGAINST ('+(+testA testB) +testC' IN BOOLEAN MODE) as score FROM test_fulltext 

Je reçois les résultats incorrects suivants (notez que la deuxième ligne doit retourner 0)

 
id| score 
1 | 1,1666667461395 
2 | 0,66666668653488 

Cependant, lorsque je cours en tant que version légèrement modifiée de la requête (aucun signe '+' avant t ESTA):

SELECT id, MATCH (text) AGAINST ('+(testA testB) +testC' IN BOOLEAN MODE) as score FROM test_fulltext 

-je obtenir un résultat correct:

 
id| score 
1 | 1,3333333730698 
2 | 0 

Avez-vous une idée pourquoi la première requête correspond à la deuxième ligne? Il le fait à la fois sur mysql 4.1 et 5.0.5. Savez-vous où je peux trouver le code source qui analyse les requêtes en texte intégral? Ou toute autre source d'information qui explique comment cela est calculé. Toute aide est la bienvenue.

+1

Vous pouvez télécharger la source sur le site de MySQL (il suffit de choisir 'source' au lieu d'os/distribution), la logique est dans 'stockage/MyISAM/ft_parser.c' – Wrikken

+0

@wrikken Merci! –

Répondre