Разработка сайтов, создание сайтов
главная / PHP / PHP поиск

PHP поиск

PHP поискПолнотекстовый поиск

Полнотекстовый поиск в СУБД MySQL на сегодняшний день поддерживается только для таблиц типа MylSAM и только для текстовых столбцов переменной длины (TEXT И VARCHAR). Эта возможность активируется созданием индекса типа FULLTEXT ДЛЯ столбцов, по которым необходимо осуществлять поиск.

Полнотекстовый поиск в СУБД MySQL не чувствителен к регистру. Кроме того, при поиске игнорируются так называемые "общеупотребительные" слова. К ним относятся слишком короткие слова (по умолчанию состоящие меньше, чем из четырех символов), а также слова, встречающиеся, по крайней мере, в половине записей. Так если в таблице имеются только две записи, то поиск не даст результатов, поскольку каждое слово будет присутствовать в половине записей.

Для использования возможности полнотекстового поиска в таблице, содержащей текстовые поля, необходимо создать индексы FULLTEXT. Изменить уже существующие таблицы можно при помощи SQL-оператора ALTER. В листинге ниже для текстового поля name таблицы table_author создается индекс FULLTEXT.

ALTER TABLE table_author ADD FULLTEXT name (name);

В листинге сразу после ключевого слова FULLTEXT следует имя создаваемого индекса, за которым в скобках указано имя текстового столбца.

Индекс FULLTEXT можно создать сразу по нескольким столбцам. Для этого в скобках после имени индекса нужно указать имена двух столбцов через запятую:

ALTER TABLE table_author ADD FULLTEXT name (name, description);

Если индекс создается только по одному столбцу и его имя совпадает с именем столбца, то имя индекса, размещаемое после ключевого слова FULLTEXT, можно опустить.

На количество индексов в таблице ограничения также не накладываются, допустимо создание нескольких индексов:

ALTER TABLE table_author ADD FULLTEXT (name),
ADD FULLTEXT (description),
ADD FULLTEXT together (name, description);

Поиск выполняется при помощи встроенной функции MATCH(), в качестве аргумента которой выступает один или более индексов типа FULLTEXT, а также функции AGAINST (), которая принимает в качестве аргумента искомую строку:

Оператор SELECT, осуществляющий полнотекстовый поиск

SELECT * FROM table_author WHERE MATCH(name) AGAINST(`программирование`);

В листинге из таблицы table_author извлекаются все записи, соответствующие статьям, в названии которых встречается слово "программирование". Синтаксис допускает использование нескольких конструкций MATCH() — AGAINST() после оператора WHERE, разделенных логическими операторами OR ИЛИ AND

SELECT * FROM table_author WHERE MATCH(name) AGAINST(`программирование`)
OR MATCH(name) AGAINST(`кодирование`);

В листинге из таблицы table_author извлекаются все записи, соответствующие статьям, в теле которых присутствует либо слово "программирование", либо слово "кодирование".

Результаты поиска сортируются в порядке уменьшения релевантности. Величина релевантности представляет собой неотрицательное число с плавающей точкой. Релевантность вычисляется на основе количества слов в данной строке столбца, количества уникальных слов в этой строке, общего количества слов в тексте и числа документов (строк), содержащих отдельное слово.

Начиная с версии 4.0.1, СУБД MySQL поддерживает поиск в так называемом логическом режиме, позволяющем задать обязательное отсутствие слова в результатах запроса, изменять величину релевантности для отдельных слов и многое другое.

PHP поиск

Пример использования полнотекстового поиска в PHP

Допустим, в нашей базе есть столбец article_content с индексом FULLTEXT. Приведем пример полнотекстового поиска всех записей, где встречается выражение «php поиск»:

<?
require(`config.php`); //Устанавливаеем соединение с базой
$query = " SELECT * FROM articles WHERE MATCH(article_content) AGAINST(`php поиск`) ";
$zapros = mysql_query($query);
while ($data = mysql_fetch_assoc($zapros)) {
print_r($data);
}
?>



Источник: webworks.com.ua
текущее:

НОВОСТИ

2011 г., «VisMech.ru»