Я работал над функцией поиска в реальном времени для моего сайта. Я беру кучу табличных значений (т. Е. Группы, жанры, альбомы и т. Д.) И помещаю их в соответствующие таблицы, а также в таблицу поиска для индексации. Мой главный вопрос — как мне сделать это более точным?
Вот мой запрос MySQL (ПРИМЕЧАНИЕ: результаты одинаковы с Desc или без):
$search = "(SELECT * FROM `search`
WHERE `search_name` LIKE '%$search_term%'
ORDER BY '%$search_term%' DESC
LIMIT 0, 8)";
Вот пример базы данных:
Search ID | Search Name | Type |
----------------------------------------------------------
8 | Big Deal (What's He Done Lately?) | Album |
12 | Henry's Funeral Shoe | Band |
Проблема в том, что когда я набираю ЧАС в параметре поиска, я ожидаю Похоронная обувь Генри чтобы быть на вершине, но вместо этого я получаю Большой курс (Что он сделал в последнее время?) перед ним, потому что он содержит H и ищется до того, как более подходящим является.
Итак, мой вопрос: Есть ли функция MySQL, которая может сортировать таблицу и находить наиболее релевантные результаты и сравнивать их с менее значимыми?
Простой поиск прост. Хороший поиск труден.
При настройке поиска вы должны понимать данные и то, что будут искать пользователи. В вашем случае вы хотите, чтобы товары, начинающиеся с условий, были возвращены первыми (я полагаю).
MySQL не является лучшей платформой для поиска в целом, но вы можете сделать 2 поиска. Первый:
search_name LIKE '$search_term%'
Обратите внимание на пропущенный% перед поисковым термином. Эти результаты имеют более высокий рейтинг.
Во-вторых, вы должны использовать:
search_name LIKE '%$search_term%'
Это ваши оценки ниже. Любые результаты, которые также находятся в списке с более высоким рейтингом, должны быть удалены из списка с более низким рейтингом.
Наконец, вы должны объединить наборы результатов, чтобы не перепутать их.
Хотя это не идеально и не может быть изменено, это может помочь в основном поле поиска.
Других решений пока нет …