Я пытаюсь выбрать ключевые слова из БД на основе пользовательского ввода текста. Я попытался сравнить варианты LIKE и MATCH AGAINST, которые лучше подходят для меня, но ни один из них не работает именно так, как мне нужно. Я действительно предпочитаю использовать MATCH AGAINST из-за лучшей производительности и определения релевантности результатов.
MATCH AGAINST оправдывает мои ожидания, за исключением одной большой проблемы. Позвольте мне показать проблему на моем конкретном примере:
SELECT * FROM skills WHERE MATCH(skillName) AGAINST('mam problem s javascriptovym frameworkem jquery.' IN BOOLEAN MODE)
В таблице у меня есть навыки с именами "javascript" и "jquery". «jQuery» навык выбран этим запросом, но «JavaScript» нет. Есть ли способ выбрать навыки, которые соответствуют root слова, а не всему слову? Я знаю, как решить обратную ситуацию (поэтому в таблице содержится целое слово, а в пользовательском вводе есть только root этого слова) - в этом случае мне просто нужно добавить * к слову в пользователе вход. Но мне нужно было бы сделать что-то вроде добавления * к значению столбца - я знаю, что это не разрешено.
Единственное решение, которое я понял, - это изменить РЕЖИМ на WITH QUERY EXPANSION и на другой столбец. сохраните другие формы слова, которые, я думаю, должны работать, но мне было бы очень трудно справиться с этим.
Если я использую вариант LIKE, он выглядит так:
SELECT * FROM skills WHERE 'mam problem s javascriptovym frameworkem jquery.' LIKE CONCAT('%', skillName, '%')
This делает именно то, что мне нужно для достижения sh с MATCH AGAINST. Я бы использовал это, но я боюсь проблем с производительностью, когда пользовательский ввод очень длинный, и я не знаю, как эффективно работать с релевантностью здесь ...
Пожалуйста, скажите мне, что у вас есть лучшее решение, чем это я написал. Большое вам спасибо.
РЕДАКТИРОВАТЬ: