Как написать поисковую систему

Armus

Новичок
Репутация
10 / 955
Вы хоть раз задумывались, как устроены такие поисковые системы как Яндекс или 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.

Вот и все. Такой вот небольшой и полезный экскурс в поисковые системы.

Источник: http://i-novice.net
 
Сверху