Как написать поисковую систему
Вы хоть раз задумывались, как устроены такие поисковые системы как Яндекс или Google? Если бы перед Вами стояла задача написать поисковую систему с нуля, с чего бы Вы начали? Наверняка многие из Вас уже писали простые контентные сайты с внутренней системой поиска для них, А поиск реализовывали очень просто – командой LIKE синтаксиса SQL. Думаете, Яндекс тоже так работает?
Рассказать про все механизмы, реализованные в современных поисковых системах – это явно задача не для одного поста (да и рассказать-то я много не смогу ), поэтому здесь я расскажу про самую значимую и неизвестную для многих часть поисковиков – индекс. Но не будем торопиться.
Вообще, всю поисковую систему можно условно разделить на 3 части: интерфейс пользователя, поисковый агент и индекс.
Интерфейс пользователя знаком всем – google.com, ya.ru. Обычно это просто строка поиска. Поисковый агент – программа, которая ползает по сайтам, собирая тексты страниц и url с них. Поисковый агент сохраняет собранную информацию в индексе.
Ну, а самая важная часть – это индекс, или поисковая база данных.
В индексе хранится все собранная поисковыми агентами информация – страницы Интернета.
В общих чертах работа агента заключается в сборе информации – он заходит на страницу сайта, берет оттуда текст, вытаскивает из него ссылки и отправляет их вместе с текстом в индекс. Этот момент как раз следует рассмотреть подробнее, так как в нем и заключается главная работа поисковой системы.
Как именно данные сохраняются в индекс? Какую структуру имеют таблицы индекса? Это как раз является одной и ключевых деталей поисковой системы.
Если рассматривать поисковую систему очень абстрактно, то индекс можно разделить на три таблицы: словарь, документы и связи.
Чтобы было понятней, представьте три таблицы:
words (словарь) c полями:
id, name
documents (документы) с полями:
id, document
и relations (связи) с полями:
word_id, doc_id
Прежде чем добавить текст страницы в индекс, поисковая система разбивает его на слова. После получения списка слов из документа, она добавляет в свой словарь (таблица words) те слова из них, которых там еще нет. А сам документ сохраняет в таблице documents.
После этого, в таблицу relations добавляются связи “слово-документ”, которые определяют, какие слова в каком документе встречаются.
Следующий сложный процесс, который реализуется в поисковых системах – выборка и ранжирование информации по запросу пользователя.
После того, как Вы заходите на сайт google.com и вбиваете в поиск “php”, запускается очень сложный механизм, цель которого – показать Вам список связанных с запросом документов, в порядке убывания релевантности.
Как это реализуется? Тут все очень сложно. Во-первых, поисковая система должна выбрать соответствующие документы – те документы, в которых встречаются указанные слова. С помощью таблиц указанных выше уже можно в целом представить себе как это делается. А вот с ранжированием (упорядочиванием) уже начинаются проблемы, которые каждая поисковая система решает по-своему.
Тут уже применяются очень сложные алгоритмы кластеризации и классификации, которые разбивают все документы на группы и определяют категорию для каждого документа. Уже, исходя из этих категорий, появляется некоторая информация о степени релевантности каждого документа. Помимо этого фактора в современных поисковых системах учитываются еще и огромное количество других.
Следует правда различать поисковые системы по вебу (google, Яндекс и др.) от относительно небольших информационно-поисковых систем. Первые значительно превосходят по масштабам вторые, а значит и структура у них намного сложнее.
К небольшим поисковым системам можно отнести такие проекты как sphinx и lucene.
Вот и все. Такой вот небольшой и полезный экскурс в поисковые системы.
Дополнительная информация:
Все верно, только намного сложнее. Главная проблема - релевантность.
Да, самое главное в поисковиках - это релевантность. И чтобы этого добиться, нужно очень много потрудиться. Но за экскурс спасибо! Отлично расписал, просто и понятно.
Привет, всем! Хорошо написано, если б детальней конечно..
Достаточно интересная статья, задумывался как реализован поисковик, но особых соображений не было!
дам все конечно замечательно но я не увидел того что хотел )))
какую БД использует крупнейшие поиск системи )))
плиз ответьте если ктото знает