Это включает в себя настройку и последующее использование индекса FULLTEXT. Это устанавливает индекс (https://www.db-fiddle.com/f/2E7ep7eos8wNWUNq6VTCEv/0):
CREATE FULLTEXT INDEX textindex ON user (firstname, lastname, username, country);
И это использует его. Он показывает оценку FULLTEXT для каждой записи и упорядочивает их в первую очередь.
SELECT *,
MATCH (firstname, lastname, username, Country)
AGAINST ('Ricky Cris Germany' IN NATURAL LANGUAGE MODE) AS score
FROM user
WHERE MATCH (firstname, lastname, username, Country)
AGAINST ('Ricky Cris Germany' IN NATURAL LANGUAGE MODE)
ORDER BY score DESC
FULLTEXT в режиме естественного языка по своей природе нечеткий. Он предназначен для показа результатов поиска кандидатов пользователю, чтобы он мог выбрать соответствующий. Ему нравится возвращать много «ложноположительных» строк, надеюсь, с меньшими оценками, чем реальные строки. Редактировать FULLTEXT работает как поисковые машины inte rnet: он отображает несколько результатов и делает все возможное, чтобы ранжировать их по релевантности. Затем он полагается на пользователя, чтобы выбрать желаемый результат. Слишком много ожиданий от FULLTEXT, что он удалит нежелательные элементы из наборов результатов.
Кроме того, поиск на естественном языке FULLTEXT делает странные вещи в таблицах, содержащих менее пары сотен строк. Так что не расстраивайтесь, если ваши крошечные тестовые таблицы, кажется, не работают правильно.