Как я могу выполнить поиск MySQL, который будет соответствовать частичным словам, но также обеспечивает точную сортировку релевантности?
SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS relevance
FROM subjects
WHERE MATCH(name) AGAINST ('math*' IN BOOLEAN MODE)
Проблема с булевым режимом - это то, что релевантность всегда возвращает 1, поэтому сортировка результатов не очень хороша. Например, если я помещаю лимит в 5 из результатов поиска, то возвращаемые не кажутся наиболее релевантными иногда.
Если я ищу в режиме естественного языка, я понимаю, что оценка релевантности полезна, но я не могу совместить частичные слова.
Есть ли способ выполнить запрос, который выполняет все эти критерии:
- Может совпадать с частичными словами
- Результаты возвращаются с достоверной релевантностью
- Эффективен
Самое лучшее, что у меня есть до сих пор:
SELECT name
FROM subjects
WHERE name LIKE 'mat%'
UNION ALL
SELECT name
FROM subjects
WHERE name LIKE '%mat%' AND name NOT LIKE 'mat%'
Но я бы предпочел не использовать LIKE
.