Как отсортировать результат поиска mysql по релевантности?
У меня есть аналогичный запрос, как задано на этот вопрос
MySQL-как упорядочить по релевантности? INNODB Таблица
Разница в том, что здесь я хочу искать из 5 полей как
Добавьте 1, add2, add3, post_town, post_code
И только записи в поле post_code не будут пустыми, другие поля записей могут быть пустыми в некоторых местах. Если я ищу ключевое слово kingston , оно возвращает
Acre Road, Kingston upon Thames, KT2 6EA
Kingston Road, Epsom, KT19 0DG
Kingston Road, Epsom, KT20 0DH
И эти результаты являются комбинацией всех поля добавьте 1, add2, add3, post_town, post_code
Мне нужен этот результат в следующем порядке
Kingston Road, Epsom, KT19 0DG
Kingston Road, Epsom, KT20 0DH
Acre Road, Kingston upon Thames, KT2 6EA
Мой текущий SQL-запрос выглядит так
SELECT add1, add2, add3, post_town, post_code FROM address_mst
WHERE add1 LIKE '%".$keyword."%'
OR add2 LIKE '%".$keyword."%'
OR add3 LIKE '%".$keyword."%'
OR post_town LIKE '%".$keyword."%'
OR post_code LIKE '%".$keyword."%'
Поэтому мне нужны записи с поисковым ключевым словом, которое в начале придет первым. Как я могу это сделать ?
3 ответа:
Не самая красивая, но должна работать!
select a.* from ( SELECT add1, add2, add3, post_town, post_code, 1 as rank FROM address_mst WHERE add1 LIKE '%".$keyword."%' UNION SELECT add1, add2, add3, post_town, post_code, 2 as rank FROM address_mst WHERE add2 LIKE '%".$keyword."%' UNION SELECT add1, add2, add3, post_town, post_code, 3 as rank FROM address_mst WHERE add3 LIKE '%".$keyword."%' UNION SELECT add1, add2, add3, post_town, post_code, 4 as rank FROM address_mst WHERE post_town LIKE '%".$keyword."%' UNION SELECT add1, add2, add3, post_town, post_code, 5 as rank FROM address_mst WHERE post_code LIKE '%".$keyword."%' ) a order by a.rank asc;
Для сортировки на основе релевантности, полнотекстовый поиск является более надежным вариантом.
FULL TEXT SEARCH
используется релевантность, основанная на количестве вхождений искомого термина, которое впоследствии может быть использовано для упорядочения возвращаемых результатов.
Почему бы не выбрать минимальные квалификационные результаты с помощью запроса и использовать собственную логику в скрипте, чтобы заранее ранжировать вес вашего результата и сортировать их соответственно ?
Это поможет вам:
Есть более сложные критерии ранжирования, которые могут быть или не быть возможными в запросе.
Не редактирует sql-запрос, если ваши критерии ранжирования меняются.