Советую в любом случае вот эту главу из манула: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
Также есть мощная конструкция: LIKE '%word%'
Словарь Лебедева (ispell) можно для удобства и скорости перевести в БД и искать в полученной таблице.
[sql]SELECT sp1.form FROM spell sp1, spell sp2 WHERE sp1.word=sp2.word AND sp2.form='$1'[/sql] получаем нужное. Таблица весит 80 Мб, 1,399,201 записей.
Mich, реализовал аналогичную схему:
есть таблица id,word,parent
стоит индекс (10 символов) на word.
При поиске я ищу с помощью IN('раз','два','три')..
Для страниц - есть индекс id первослов в отдельной таблице, при поиске - я только id первослов нахожу и потом уже с int работаю...
так что скоркость - сотые доли секунды..
В ispellе многого нет, так что лучше его поддерживать эвристическим генератором окончаний. Пускай этот генератор придумает несуществующие слова - они все равно на сайте не найдутся.
Вот http://www.managee.ru/ru/search/ - тут у меня поиск по ispell + придумыватель окончаний для несуществующих слов. Есть отладочный вывод сгенеренного MySQL-запроса
Вообще, ispell в морфологическом поиске применяется "от бедности", он предназначен совсем для другого. Есть мысль сделать из него "словарь парадигм" - скажем, окончаний слов буквы в 2-3-4 длиной. И среди них уже и искать.
SELECT *, MATCH (firstName, lastName)
AGAINST('{$_POST['searchWord']}*' IN BOOLEAN MODE) AS rel
FROM users
WHERE MATCH (firstName, lastName)
AGAINST('{$_POST['searchWord']}*' IN BOOLEAN MODE)
ORDER BY rel DESC
Поля firstName and lastName в таблице БД должны быть как fullText. Не обязательно должно быть два поля, можно и одно и больше...
kruglov
Для поиска однородных данных таких как имена пользователей (Иванов, Иванова, Ивановы) какраз подойдет. И отсортирует по наиболее подходящей записи.