Обход, который я придумал, состоит в том, чтобы найти наилучшие совпадения и использовать их, чтобы получить процентные значения относительно этих максимумов, в этом случае это может быть не совсем полезно, но это, безусловно, дает вам представление.Я использую этот метод для поиска дубликатов, сначала я вставляю строку, а затем запускаю этот запрос, конечно же, наилучшее совпадение - это та же строка.
Сначала я должен выбрать наилучшее совпадение:
SELECT
MAX(MATCH (table.col1) AGAINST ('text 1' IN NATURAL LANGUAGE MODE)) AS bscore_col1 ,
MAX(MATCH (table.col2) AGAINST ('text 2'
IN NATURAL LANGUAGE MODE)) AS bscore_col2
FROM table
ORDER BY bscore_name col1 DESC, bscore_col2 DESC) AS bests
Можно, конечно, добавить несколько столбцов, но сначала необходимо создать соответствующие индексы полнотекстового поиска.
Полный запрос берет результат первого запроса и использует их в качестве ссылок, которые можно изменить.соотношение 0,5, 0,5 означает, что полученный балл должен быть> 50% от лучшего балла. Если вы хотите получить все результаты, удалите выражение сравнения.
SELECT *,
MATCH (table.col1) AGAINST ('text 1' IN NATURAL LANGUAGE MODE)/bests.bscore_col1 AS score_col1 ,
MATCH (table.col2) AGAINST ('text 2' IN NATURAL LANGUAGE MODE)/bests.bscore_col2 AS score_col2
FROM (table,
(SELECT
MAX(MATCH (table.col1) AGAINST ('text 1' IN NATURAL LANGUAGE MODE)) AS bscore_col1 ,
MAX(MATCH (table.col2) AGAINST ('text 2' IN NATURAL LANGUAGE MODE)) AS bscore_col2
FROM table
ORDER BY bscore_col2 DESC, bscore_col1 DESC) AS bests)
WHERE
MATCH (table.col1) AGAINST ('text 1' IN NATURAL LANGUAGE MODE)/bests.bscore_col1 > 0.5 AND
MATCH (table.col2) AGAINST ('text 2'IN NATURAL LANGUAGE MODE)/bests.bscore_col2 > 0.5
ORDER BY score_col2 DESC, score_col1 DESC
Я не верю этомуэто лучшее решение, но оно хорошо в моем случае.