MySQL полнотекстовый поиск пользовательского ввода по ключевым словам, сохраненным в БД - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь выбрать ключевые слова из БД на основе пользовательского ввода текста. Я попытался сравнить варианты 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. Я бы использовал это, но я боюсь проблем с производительностью, когда пользовательский ввод очень длинный, и я не знаю, как эффективно работать с релевантностью здесь ...

Пожалуйста, скажите мне, что у вас есть лучшее решение, чем это я написал. Большое вам спасибо.

РЕДАКТИРОВАТЬ:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...