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

Вы хоть раз задумывались, как устроены такие поисковые системы как Яндекс или 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.

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

Дополнительная информация:

  1. Sphinx
  2. Lucene
  3. Lucene (wiki)




Читайте также:



5 Ответов на “Как написать поисковую систему”

  1. Все верно, только намного сложнее. Главная проблема - релевантность.

  2. Да, самое главное в поисковиках - это релевантность. И чтобы этого добиться, нужно очень много потрудиться. Но за экскурс спасибо! Отлично расписал, просто и понятно.

  3. Сео Мир

    Привет, всем! Хорошо написано, если б детальней конечно..

  4. Ravx

    Достаточно интересная статья, задумывался как реализован поисковик, но особых соображений не было!

  5. Евгений

    дам все конечно замечательно но я не увидел того что хотел )))
    какую БД использует крупнейшие поиск системи )))

    плиз ответьте если ктото знает


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map