Полнотекстовый поиск с морфологией
Другие статьи:
Полнотекстовый поиск в MYSQL
02 декабря 2011Визуальное объяснение SQL Joins
26 апреля 2011
Статья расчитана, на читателя, который знаком с полнотекстовым поиском.
Прочитать: полнотектстовый поиск.
Предистория
Достаточно часто в крупных сайтах, таких как порталы со статьями или Интернет-магазины, необходим поиск информации. Есть несколько простых решений, например, установить Google или Яндекс поиск на сайт, вот только данные поисковая система будет искать, во всем сайте, а в индексацию новые документы (товары) попадают далеко не сразу. Так же минус такого поиска в том, что, сложно задать область поиска, например: необходимо искать только среди товаров или статей, а когда постоянно пополняется сайт, управлять такими ограничениями становиться сложно и не удобно.
С другой стороны, в Google и Яндекс поисках, есть большое приемущество, они выполняют поиск с учетом морфологии, находят информацию очень быстро и качествено, подобный поиск технически реализовать весьма сложно.
В современных базах данных, используемых для сайтов (например MYSQL), есть полнотекстовый поиск.
Но он не учитывает морфологию и выполняет поиск по строгому совпадению.
В полнотекстовом поиске MYSQL есть логический режим, в котором есть оператор
* «звездочка» - оператором усечения. В отличие от остальных операторов, она должна добавляться в конце слова, а не в начале.
Этим мы и воспользуемся.
Идея реализации морфологичесткого поиска
Морфологический поиск, это громко сказано, тем не менее, данное решение весьма подходящее для множества сайтов и не требует установки каких либо модулей на типичном хостинге.
Вспомним примеры использования оператора * в полнотекстовом поиске:
apple*
В результате, под действием оператора отбираются: ... ``apple'', ``apples'', ``applesauce'', и ``applet''.
Теперь немного вспомним буквы в букваре, которые мы учили в 1 классе.

Эта таблица, знакома нам всем с детства. Мы рассмотрим только то, что, буквы в алфавите разделяются на гласные (красные) и согласные (синие).
Й, Ъ, Ь – назовем их «полугласные» буквы.
Суть алгоритма
Строку запроса разделяем на слова. После каждое слово анализируем, если оно полностью состоит из русских букв, тогда удаляем с конца гласные и «полугласные» буквы, до первой согласной буквы. Если согласная буква в слове не найдена, тогда удаление в слове не выполнять.
Примеры удаления окончания слова:
- сушки
- сушка
- мебель
- мебельная фурнитура
- направляющие
- направляющие полного выдвижения
- акции
- аукционные товары
- комплектующие для кухонь
Отмеченная область слова удаляется перед подстановкой в запрос. Удаленные буквы заменяем на знак *, что означает в методе сравнения like любую последовательность. Обработку слов выполнить отдельной функцией, в которой задаешь слово и получаешь обрезанное. Так же, еще необходимо, очистить строку запроса от «стоп слов». Скачать справочник стоп слов.
Повнотекстовий пошук, для української мови
В даному випадку суть пошуку така сама, тількі треба враховувати видалення голосних букв:
а, е, и, і, о, у, є, ю, я, ї – голосні
б, в, г, ґ, д, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, й – приголосні
ь, й – «напівголосні».
