Найти в Дзене
IT Web Doctor

MySql. Поиск LIKE - как сделать релевантным.

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

-----------------------------

Теперь на нашу голову упадет не просто размешанный поиск, а поиск отсортированный по балам. Надеюсь понятно, что чем больше бал, тем выше будет результат в поиске.