MySql. Поиск LIKE - как сделать релевантным.
Когда мы самостоятельно разрабатывает сайт на PHP (пыхе), то для поиска например статей мы делаем небольшой такой запросик в базу MySql
что бы вытащить данные:
-----------------------------
SELECT
*
FROM
`articles`
WHERE
`name` LIKE '%KEY%'
OR `text` LIKE '%KEY%'
-----------------------------
И что же нам выдает после этой процедуры поиск? Да правильно, непонятную мешанину если ключевое слово одно или часто встречается.
Но есть способ (а если быть точным - то парочка) как исправить эту ситуацию.
Тут я опишу один из этих способов (второй пока не буду, потому что это страшно секретный способ :-).
Все просто, можно исправить это введением рейтига по коэффициенту релевантности. Т.е. если во время поиска ключевое слово находится в названии статьи, то мы увеличиваем его значение на 20. Если мы находим это слово в тексте статьи, то плюсуем еще 10 баллов.
После того как мы найдем все статьи по условию, нам останется только отсортировать таблицу по присвоенным балам.
Так давайте же сделаем это.
-----------------------------
SELECT
*,
(
IF (`name` LIKE '%KEY%', 20, 0)
+ IF (`text` LIKE '%KEY%', 10, 0)
) AS `relev`
FROM
`articles`
HAVING
`relev` > 0
ORDER BY
`relev` DESC
-----------------------------
Теперь на нашу голову упадет не просто размешанный поиск, а поиск отсортированный по балам. Надеюсь понятно, что чем больше бал, тем выше будет результат в поиске.