Я смотрел на ту же проблему и пока не нашел идеального ответа для моей ситуации, но это может быть полезно для вас. Я довольно новичок в полнотекстовом поиске, так что любые эксперты тоже помогут мне.
Я делаю два оператора MATCH () ПРОТИВ () в выборке и объединяю оценки для каждого, чтобы сформировать общую релевантность. Назначение разных множителей позволяет мне настроить importnace каждого набора результатов.
Мой первый MATCH () будет проверять по буквальному (или точному) поисковому запросу, используя двойные кавычки
Мой второй матч будет проверяться нормально. Я применяю более высокий множитель к первому совпадению, поэтому он должен иметь более высокое значение релевантности, если он найден.
Примерно так.
SELECT *, ((MATCH(indexes) AGAINST ('"search_terms"' IN BOOLEAN MODE) * 10)
+ (MATCH(indexes) AGAINST ('search_terms' IN BOOLEAN MODE) * 1.5)) AS relevance
FROM ...
WHERE ...
AND (MATCH (indexes) AGAINST ('"search_terms"' IN BOOLEAN MODE) > 0
OR MATCH (indexes) AGAINST ('search_terms' IN BOOLEAN MODE) > 0)
...
ORDER BY relevance DESC
Если вы запустите функцию EXPLAIN, чтобы показать, как работает запрос, вы обнаружите, что дополнительные предложения MATCH () AGAINST () фактически не добавляют никаких накладных расходов к запросу из-за того, как работает MySQL.