просмотров:5275 | комметариев: 2

Полнотекстовой поиск, сортировка по релевантности


Сразу приведу пример итогового запроса:

SELECT *, MATCH (title,content) AGAINST ('слово, фраза поиска') as relev FROM `table_name` WHERE MATCH (title,content) AGAINST ('слово, фраза поиска ') ORDER BY relev DESC

В запросе поиск идет по 2м полям title,content и сортирует по релевантности. Чтобы это заработало, нужно создать индекс FULLTEXT, для этих 2х полей, вот таким запросом:

alter table `table_name` add fulltext(title,content)

Здесь создается индекс по 2м полям. Возможно, может понадобится поиск по одному или, например, по 3м полям. Смысл такой, перечислить в скобках после fulltext поле/поля(через запятую), по которым будет производится поиск. Соответственно в итоговом поисковом запросе они должны быть перечислены в скобках после MATCH.

FULLTEXT индексы можно, создавать только в таблицах типа MyISAM. Поэтому, возможно, нужно будет преобразовать вашу таблицу к этому типу.

alter table `table_name` type=myisam;

Все, теперь приведенный выше запрос будет работать.

Что еще нужно знать:

1. Поиск ведется без учета регистра символов.

2. Нельзя использовать значение поля revel в операторе WHERE. Можно использовать в HAVING (HAVING > 0) и сортировать по нему (ORDER BY relev DESC)

3. За счет индексов FULLTEXT прилично растет объем базы.

4. На небольших объемах, этот способ вполне оправдан из-за простоты реализации. Например, на этом сайте, как раз таким образом организован поиск.

5. На больших объемах данных этот способ поиска использовать грешновато. Если объем данных действительно большой, нужно смотреть в сторону sphinx.

просмотров:5275 | комметариев: 2
Сергей
13 января 2013, 03:36
Спасибо! Кратко и по делу
Денис
10 мая 2016, 04:22
IN BOOLEAN MODE проверил Ваш и свой с болеан - мой релевантнее
просмотров:5275 | комметариев: 2

Оставить комментарий:    

Ваше имя:
 
Текст комментария:
 
+ 1 =