У меня есть сайт с базами данных магазинов. Посетители моего сайта может искать магазины по названию, в настоящее время SQL-запрос делается так:SQL-поиск и сортировка по наилучшим возможностям
SELECT *
FROM tbl_shop
WHERE LOWER(`name`) LIKE LOWER(`%text1%`)
OR LOWER(`name`) LIKE LOWER(`%text2%`)
.....
OR LOWER(`name`) LIKE LOWER(`%textN%`)
Это работает вполне нормально, но проблема в том, что результаты не сортируется по лучшему матчу. Некоторые имена магазинов содержат очень распространенные слова (например, «Na Lavce»), и если вы вводите эту строку, все салоны, содержащие «% na%» (что много), отображаются в виде результатов.
Из-за этого посетитель может получить много результатов, а иногда и не найти, что он ищет, потому что правильный результат, например, на пятой странице результатов. Любые идеи, как это исправить?
Вы можете легко ранжировать их по количеству матчей, и вы можете также назначить предпочтение порядку условий. Но как еще вы узнаете, какой из них лучше? – shawnt00
Вы также можете установить список общих слов и не искать эти слова, но для этого потребуется немного предварительной обработки. –
Многие распространенные слова также являются более короткими словами. Вы можете оценивать по длине поисковых терминов каким-то образом, но я не сказал этого сначала, потому что я не уверен, что он надежный. – shawnt00