Организация полнотекстового поиска в MYSQL

<?php
/*
* Организация полнотекстового поиска в MYSQL
* автор: Nc_soft
* 25.03.08
*/

//что ищем
$search='поисковая строка';

/*
Для организации поиска при небольшой нагрузки и коротких текстах отлично подходит оператор LIKE, пример
*/
$q=mysql_query("SELECT * FROM tablica WHERE pole LIKE '%$search%' ");

/*
Тут вроде бы все нормально, но когда количество записей и их объем сильно возрастет 
вы заметите, что поиск начинает занимать довольно много времени, и в итоге может достичь 
недопустимых пределов.
В таких случаях необходимо воспользоваться ИНДЕКСАМИ, например, сделаем через 
phpMyAdmin полнотекстовый индекс для ячейки pole, sql дамп создания таблицы приведен ниже

CREATE TABLE `tablica` (
  `id` int(11) NOT NULL auto_increment,
  `pole` TEXT,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `kluch` (`pole`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

обратите внимание на FULLTEXT KEY `kluch` (`pole`), индекс повешен на ячейку pole, 
как нетрудно заметить, размер базы данных из-за индекса увеличился примерно вдвое (за все надо платить).

Теперь искать по такой базе надо вот так:
*/

$q=mysql_query("SELECT * FROM tablica WHERE MATCH pole AGAINST ('$search') ");

/*
Скорость поиска возрастет минимум в 10раз, так же из плюсов то, что результаты будут отсортированы
по релевантности (тоесть сначала вся фраза, потом по частоте попадания слов)! (если не применять ORDER BY для иной сортировки конечно)

Также есть и минусы:
1. слова менее 4 символов не учитываются (как не имеющие "веса")
2. русские фразы находятся без учета морфологии
3. размер базы увеличивается из-за индекса
4. операции INSERT и UPDATE выполняются медленнее из-за индекса

если у вас в таблице более 10000 строчек и размер бд более 5мб наверное стоит перейти на полнотекстовый поиск
*/

?>