Полнотекстовый поиск с морфологией

Другие статьи:

Вся библиотека




Статья расчитана, на читателя, который знаком с полнотекстовым поиском.
Прочитать: полнотектстовый поиск.

Предистория

Достаточно часто в крупных сайтах, таких как порталы со статьями или Интернет-магазины, необходим поиск информации. Есть несколько простых решений, например, установить Google или Яндекс поиск на сайт, вот только данные поисковая система будет искать, во всем сайте, а в индексацию новые документы (товары) попадают далеко не сразу. Так же минус такого поиска в том, что, сложно задать область поиска, например: необходимо искать только среди товаров или статей, а когда постоянно пополняется сайт, управлять такими ограничениями становиться сложно и не удобно.

С другой стороны, в Google и Яндекс поисках, есть большое приемущество, они выполняют поиск с учетом морфологии, находят информацию очень быстро и качествено, подобный поиск технически реализовать весьма сложно.

В современных базах данных, используемых для сайтов (например MYSQL), есть полнотекстовый поиск. Но он не учитывает морфологию и выполняет поиск по строгому совпадению. В полнотекстовом поиске MYSQL есть логический режим, в котором есть оператор
* «звездочка» - оператором усечения. В отличие от остальных операторов, она должна добавляться в конце слова, а не в начале. Этим мы и воспользуемся.

Идея реализации морфологичесткого поиска

Морфологический поиск, это громко сказано, тем не менее, данное решение весьма подходящее для множества сайтов и не требует установки каких либо модулей на типичном хостинге.

Вспомним примеры использования оператора * в полнотекстовом поиске:

apple*

В результате, под действием оператора отбираются: ... ``apple'', ``apples'', ``applesauce'', и ``applet''.

Теперь немного вспомним буквы в букваре, которые мы учили в 1 классе.

Эта таблица, знакома нам всем с детства. Мы рассмотрим только то, что, буквы в алфавите разделяются на гласные (красные) и согласные (синие).

Й, Ъ, Ь – назовем их «полугласные» буквы.

Суть алгоритма

Строку запроса разделяем на слова. После каждое слово анализируем, если оно полностью состоит из русских букв, тогда удаляем с конца гласные и «полугласные» буквы, до первой согласной буквы. Если согласная буква в слове не найдена, тогда удаление в слове не выполнять.

Примеры удаления окончания слова:

  • сушки
  • сушка
  • мебель
  • мебельная фурнитура
  • направляющие
  • направляющие полного выдвижения
  • акции
  • аукционные товары
  • комплектующие для кухонь

Отмеченная область слова удаляется перед подстановкой в запрос. Удаленные буквы заменяем на знак *, что означает в методе сравнения like любую последовательность. Обработку слов выполнить отдельной функцией, в которой задаешь слово и получаешь обрезанное. Так же, еще необходимо, очистить строку запроса от «стоп слов». Скачать справочник стоп слов.

Повнотекстовий пошук, для української мови

В даному випадку суть пошуку така сама, тількі треба враховувати видалення голосних букв:

а, е, и, і, о, у, є, ю, я, ї – голосні

б, в, г, ґ, д, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, й – приголосні

ь, й – «напівголосні».

© 2005—2012 Студия Потапова Олега