Как стать автором
Обновить

Своя поисковая система на сайте

Время на прочтение2 мин
Количество просмотров1K
Часто встречаю такую ситуацию, когда на Интернет-сайтах необходим собственный внутренний полнотекстовый поиск. Реализовать его не так уж и сложно, а эффект от его внедрения огромный.
Так на одном из своих проектов необходимо было реализовать быстрый поиск тематической информации из БД. На данный момент для решения подобных проблем используются теги и рубрики к записям. Но в моем случае это был не вариант. Постановка задачи следующая: на основе введенных двух-трех слов необходимо вывести записи, содержащие эти слова.
Структура в упрощенной форме БД приведена на рисунке.

image

В таблице «Слова» содержатся все слова, которые встречаются в имеющихся записях, в таблице «Записи» соответственно тексты записей, а таблица «Связи» включает в себя ссылки на использование записями соответствующих слов.
Вся работа этой упрощенной поисковой системы содержит в себе ряд этапов. Первым этапом является добавление новой записи. Так весь текст записи разбивается на массив слов. После чего выполняется несколько запросов к БД: проверяется, имеются ли уже эти слова в таблице «Слова», если не имеются, то добавляются все необходимые записи. Определяются идентификаторы каждого из слов. Последним шагом является добавление пар идентификаторов слова и записи в таблицу «Связи».
Редактирование по сути дела является аналогичной операции добавления записи за исключением того, что предварительно из таблицы «Связи» необходимо удалить все записи, относящиеся к редактируемому тексту. С удалением же, я думаю, вопросов не возникнет.
Теперь относительно самого поиска записей. Допустим, пользователь вводит какое-то слово в поле поиска. Само поле поиска является полем ввода с самозаполнением.
Шаг 1:

image

Шаг 2:

image

Шаг 3:

image

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

Что мы в итоге получаем?


В конечном итоге у пользователя появляется возможность быстрого поиска необходимых записей по его запросу, притом система сама помогает ему сформулировать этот самый запрос. К тому же, если говорить о системе тегов, то необходимость в ней полностью отпадает. Но это скорее дело вкуса.
Теги:
Хабы:
Всего голосов 18: ↑11 и ↓7+4
Комментарии15

Публикации

Истории

Ближайшие события