Изначально нашел здесь: http://zhilinsky.ru/2008/03/13/morphlogy/ На данный момент словари есть для русского, английского и немецкого языков. Скачать можно с SourceForge - http://sourceforge.net/projects/phpmorphy/
вообще-то он нужен именно для того, чтобы этого не допускать. А создавать таблицу связей слова(корни)-посты/статьи, которая в таком виде получается вменяемых размеров.
armadillo Чёт я не въехал в смысл твоего поста [telepath mode on] Если ты хочешь создавать таблицу связок слов и постов, где они есть, ТО: 1). Выбираешь все слова (исключая лишнее). 2). Прогоняешь всё через phpMorphy и получаешь все словоформы или корни слов (это логичнее) 3). Чекаешь что у тебя уже есть в базе из этих слов, а чего нету, добавляя отсутствующие корни в базу 4). Добавляешь в таблицу связок всё что надо. Все это лучше всего делать в background'e по крону (записывая при постинге куда-то ID поста, который нужно обработать) или после постинга поста по register_shutdown_function (про неё я не совсем уверен) что-бы пользователь этого процесса не замечал если он слишком долог. При поиске нужно всего-лишь получить корни ключевых слов, получить их ID и передать их в SQL запрос, который выберет все посты, где есть эти слова из таблицы-связки [/telepath mode off]
угу. Что непонятного я сказал? в обычном пхпбб2 такая таблица с полными словами занимает большую часть объема.
Интересная вещь.. Буду разбираться как её можно прикрутить... З.Ы. Psih, фичи тырить нехорошо. [telepath mode screwed]
armadillo Зато поиск быстрый. К тому-же если у тебя форум будет большим очень, то эти данные будут уже не такие большие. Кстати как в PHPBB сделан поиск по словоформам неизвестно мне, может он для него "бегал" и "бегать" разные слова вообще. Для phpMorthy теоретически это должно быть одно и тоже. З.Ы. Не ругать, поскольку я _не знаю_ как то и другое работает, я предпологаю. Если хотите знать точно, проверьте и поделитесь результатами.
Psih большое спасибо за ссылку! Прикрутил поиск используя phpMorthy. Работает замечтательно! Главная поблема была сделать нормальную функцию разбиения текста на слова. Честно говоря, результатом доволен не очень. Может кто знает, есть ли какая-нить готовая функция для этого?
круто! но есть одно но - иногда когда ищешь надо найти именно в нужном склонении или времени, что задать принципе не трудно, а вот отплевываться от того лишнего что нашли считая одним словом например яндекс заколебешься, поэтому не заморачиваюсь на эту тему. Хотя для другого проекта где будут распознаваться слова ии весьма полезно.
Это уже файн-тюнинг, которым можно бесконечно заниматься - дополнять поиск разными опциями, например ограничивающими поиск по датам, выбор все слова или любое из слов, поиск по разделам, поиск с и без словоформ, конвертацию популярных сокращений в нормальные слова и т.д... Так же очень полезно сделать систему кеширования результатов запроса, на случай, если в результатах поиска несколько страниц. Я вот все это реализовал (кроме точного вхождения) вот здесь: http://www.novosel.ru. Как результат, индексная база сократилась почти в двое, скорость поиска ощутимо возросла, количество запросов пользователей, по которым хоть что-то найдено, увеличилось в разы. Т.е. оно того стоило.