After revisiting this, I
think this is why your query wasn't working:
The parser used the '&' and the ';' characters as delimiters, so you were actually searching against '
cola', '
ccedil', and '
o'. Since '
o' is too short, it was dropped. Now you are just searching for '
cola' and '
ccedil' (not as one word anymore). This would explain why entries with '
ç' were returned. They should have had a lower score as well, right? Similarly, you should have also gotten back results with just '
cola' and not '
ccedil'. I think the trick is to encapsulate the match against in double quotes using boolean mode.
Code:
SELECT
*
, MATCH(cv.title,cv.intro,cv.text) AGAINST ('"colaço"' IN BOOLEAN MODE) AS score
FROM
cms_contents ct
LEFT JOIN cms_content_versions cv
ON cv.id_content=ct.id_content
WHERE
NOW() BETWEEN ct.date_start AND ct.date_expire
AND MATCH(cv.title,cv.intro,cv.text) AGAINST ('"colaço"' IN BOOLEAN MODE)
AND ct.id_lang = 1 AND ct.active='1'
GROUP BY ct.id_content
Let me know if that works. Good luck.