MATCH AGAINST не работает точно так, как вы думаете.
Это можно резюмировать Кейси Фултон, как «... полнотекстовой поиск только [Return] что-либо, если число результатов составляет менее 50% от общего размера таблицы ...»
Так вместо этого, я 'm ищет все LIKE, а затем отфильтровывает точные слова REGEX. Я делаю это, чтобы сократить нагрузку на процесс для REGEX.
Ниже мое решение:
$likerows = "(SELECT * FROM `tweets` WHERE text LIKE '%$q%') AS likerows ";
$regexrows = "(SELECT * FROM $likerows WHERE text REGEXP('^.* $q .*$')) AS regexrows ";
$query = "SELECT * FROM $regexrows ";
Я ставлю пространство вокруг $ Q, потому что я хочу, чтобы соответствовать высказыванию структурированного слова (которое предваряется и затем пробел).
Кроме того, я ищу слова, начинающиеся с $. Это было проблемой, и вот что я сделал для решения этой проблемы:
if(substr($q, 0, 1) == '$') $q = '\\\\' . $q; // you have to escape the backslash that escapes the $ -- it's nuts.
Удачи.
Опубликовать вывод "SHOW CREATE TABLE", пожалуйста. –