omega2 | Citation :
La fonction MATCH() effectue la recherche d'une chaîne de caractères dans une liste de textes (et dans un groupe d'une ou plusieurs colonnes utilisées pour l'index FULLTEXT). La chaîne recherchée est donnée en argument à AGAINST(). La recherche est sans distinguer les majuscules des minuscules. Pour chaque ligne de la table, MATCH() retourne une valeur de pertinence, qui est une mesure de la ressemblance entre le chaîne recherchée et le texte de la ligne dans le colonne donnée dans la liste de MATCH().
Quand MATCH() est utilisé comme condition de WHERE (voir l'exemple suivant) les lignes retournées sont automatiquement organisées avec la pertinence la plus élevé en premier. La pertinence est un nombre décimal positif. La pertinence de zéro signifie qu'il n'y a pas de similarité. La pertinence est calculé en fonction du nombre de mots dans la ligne, du nombre de mots uniques dans cette ligne, du nombre total de mots dans la liste, et du nombre de documents (lignes) qui contiennent un mot en particulier.
|
En clair, même s'il ne trouve que la moitié de ce que tu lui demandes, la valeur de "MATCH (texte) AGAINST ('fiscalité')" sera supérieure à 0 et le système te les retournera. En plus de ça, c'est une recherche qui travaille mot à mot, ça ne m'étonnerait pas que mysql considère que 'fiscalité' est formé du mot 'fiscalit' et du mot 'eacute' vu que le caractère '&' n'est pas une lettre ni un chiffre.
Comme le dit nycius, utilise donc une fonction (html_entity_decode par exemple) pour transformer tous les codes html en caractères normaux. Evidement, si t'as des balises html dans tes messages il faudra d'abord les transformer en quelque chose de plus neutre (du bbcode par exemple) Ca résoudra surement ton problème comme par magie.
PS : Comme indiqué dans le bout du manuel de mysql que j'ai cité, mysql tri par pertinence décroissante s'il n'y a aucun tri explicite d'indiqué dans la requette. Tu peux donc enlever le "order by" qui lui fait faire deux fois exactement le même boulot. |