Поисковая машина Яndex относится ко второму рассмотренному ранее типу поисковых машин. У Яndexа есть свои пауки-агенты, есть свой Индекс и поисковый механизм. Эта поисковая машина ориентирована в первую очередь на российскую часть всемирного Интернета, т. е. индексируются в ней русскоязычные сайты, расположенные в доменах ru и su. Сделаны небольшие исключения для наиболее авторитетных зарубежных сайтов. Сложнее с русскоязычными сайтами, которые зарегистрированы в международных или региональных (государственных) доменах других стран — com, org, de, us и других, но они все же попадают в Индекс и учитываются при поиске.
Большинство значимых зарубежных нерусскоязычных сайтов может быть найдено по ссылке, при этом, в отличие от русскоязычных сайтов, в Индекс они не попадают. Упрощается ситуация в том случае, когда у компаний, таких как BMW, IBM и многих других, появляются русскоязычные версии сайтов, без проблем индексируемые Яндексом.
Поисковая машина — самый востребованный ресурс Яндекса. Ежедневно его посещают около четырех с половиной миллионов посетителей, при этом количество просмотренных поисковых страниц приближается к сорока миллионам. При этом пользователи, выполняющие на нем поиск, этого не замечают — складывается впечатление, что Яндекс работает индивидуально для каждого из них.
Так, при запросе средней "тяжести", то есть при поиске не очень частотного слова, время отклика системы (без учета времени передачи данных по каналу от поисковой системы к пользовательскому компьютеру) исчисляется десятыми долями секунды.
В условиях постоянного роста количества пользователей и их запросов главной задачей поисковой машины является сохранение приемлемых с точки зрения пользователей скорости и полноты выполнения запросов. Эта задача решается несколькими способами, каждый из которых является необходимым, но не достаточным в отрыве от других. Способы достижения высоких результатов на сегодня применяются следующие:
□ оптимизация базовых поисковых алгоритмов и архитектуры поиска;
□ регулярное увеличение мощностей вычислительных ресурсов поисковой системы;
□ использование архитектурной возможности масштабирования системы.
Оптимизация поисковых алгоритмов проводится постоянно. Результаты таких работ вводятся в действие до двух раз в год. Сказывается их внедрение на уменьшении нагрузки на поисковую машину (в год эта величина составляет 20–30 %), а также на уменьшении времени отклика.
Увеличение мощности — это постоянное обновление используемого оборудования. Сюда входит и переход на более мощные процессоры, увеличение оперативной памяти, увеличение объемов дисковых хранилищ. Способ хотя и необходимый, но крайне затратный. Результативность выполненного апгрейда можно косвенно оценить увеличением объема поисковой базы, находящейся в его распоряжении.
Третий способ — использование мастшабируемости системы. В двух словах суть его заключается в том, что каждый уровень системы распараллеливается на несколько одинаковых узлов. Например, при наличии десяти поисковых серверов, обрабатывающих поступающие запросы, очередной запрос будет направляться на тот из них, которых в данный момент времени будет свободен.
Аналогично обстоит дело и со сбором информации. Этим занимается робот-паук, который обходит страницы с заданными URL и скачивает их в базу данных, а затем архивирует и перекладывает в хранилище суточными порциями. Робот размещается на нескольких машинах, и каждая из них выполняет свое задание. Так, робот на одной машине может качать новые страницы, которые еще не были известны поисковой системе, а на другой — страницы, которые ранее уже были скачаны не менее месяца, но и не более года назад.
Хранилище у всех машин едино.
При необходимости работу можно распределить другим способом, например, просто распределив между роботами всю работу, учитывая лишь ее объемные показатели. Параллельная работа программы позволяет легко выдерживать дополнительную нагрузку — при увеличении количества страниц, которые нужно обойти роботу, достаточно просто распределить задачу на большее число машин.
В хранилище информация в сжатом виде собирается и разбивается на части. Эти части постепенно распределяются между множеством машин, на которых запущена программа-индексатор. Как только индексатор на одной из машин заканчивает обработку очередной части страниц, он обращается за следующей порцией. В результате на первом этапе формируется много маленьких индексных баз, каждая из которых содержит информацию о некоторой части Интернета. При увеличении нагрузки на машины, занимающиеся индексированием, проблема может быть решена простым добавлением машин в систему.
После того как все части информации обработаны, начинается объединение (слияние) результатов. Основная база участвует в анализе как одна из частей нового индекса. Так, если объединяются 70 новых частей, то в анализе участвует 71 фрагмент (70 новых + основная база предыдущей редакции). Специальная программа ("сливатор") составляет таблицы перенумерации документов базы. Содержимое всех частей объединяется. Среди страниц с одинаковыми адресами выбирается наиболее свежая версия; если при скачивании URL последней информацией была ошибка 404 (запрашиваемая страница не существует), она временно удаляется из индексной базы. Параллельно осуществляется склейка дублей — страницы, которые имеют одинаковое содержимое, но различные URL, объединяются в один документ.
Сборка единой базы из частичных индексных баз представляет собой простой и быстрый процесс. Сопоставление страниц не требует никакой интеллектуальной обработки и происходит со скоростью чтения данных с диска. Если информации, которая генерируется на машинах-индексаторах, получается слишком много, то процедура "сливания" частей проходит в несколько этапов. Вначале частичные индексы объединяются в несколько промежуточных баз, а затем промежуточные базы и основная база предыдущей редакции пересекаются. Таких этапов может быть сколько угодно. Промежуточные базы могут сливаться в другие промежуточные базы, а уже потом объединяться окончательно. Поэтапная работа незначительно замедляет формирование единого индекса и не отражается на качестве результатов.
Источник: "Принципы работы поисковой машины Рамблер" (http://www.rambler.ru/doc/architecture.shtml).
А вот что рассказывали о решении аналогичных задач на Яндексе.
Если применить к поиску на Яндексе традиционные термины Distributed Information Retrieval, то можно выделить следующие приемы распараллеливания.
1. Разделение коллекции документов — начиная с весны 2000 года, в Яндексе используется "параллельный поиск" в нескольких поисковых источниках. Параллельный поиск — это одновременный поиск в специализированных базах (коллекциях), предлагаемых поисковой системой. Обычно, источник — это отдельная база небольшого размера, отличная от "большой" базы документов. Подразумевается, что документы, индексируемые в такой базе, имеют некоторую регулярную структуру. Если при поиске по обычной базе находятся и документы из базы параллельного поиска, точно соответствующие запросу, то одновременно (параллельно) с обычным результатами поиска выдается список из нескольких найденных документов. База параллельных источников имеет существенно меньший размер, чем база веб-поиска. Обход и индексация документов в ней осуществляется отдельным роботом, поэтому обновление базы может происходить очень быстро (вплоть до ежеминутного).
В "Яндексе" есть четыре базы параллельного поиска:
• по новостям (обновление каждые 10 минут, ежедневно около 3000 новостей);
• по товарным предложениям интернет-магазинов (ежедневное обновление, примерно 300 000 товаров);
• по заголовкам статей энциклопедий (обновление раз в месяц, около 200 000 статей);
• по каталогу ("ручному" описанию веб-ресурсов).
Особый интерес с точки зрения традиционных поисковых технологий представляет техника разделения большой базы документов, то есть собственно базы веб-страниц. По состоянию на 2002 год она состояла из 60 млн документов и была разделена на 30 частей.
Среди особенностей текущей реализации разделения веб-коллекции в Яндексе можно отметить следующее:
• есть центр контроля и распределения URL;
• отсутствует репликация коллекции по машинам;
• распределение документов по коллекциям случайно.
2. Первая фаза обработки запроса: выбор коллекции, трансформации запроса — пользователь может явно указать, в какой коллекции следует искать. Если этого не сделано, то на основе лингвистического (точнее, эвристического) анализа запроса Яндекс может сделать допущение о приоритете специализированной коллекции или подходящей к характеру запроса рубрики каталога.
3. Вторая фаза обработки запроса: раздача запроса по коллекциям — обычно используются все коллекции. Собирающий сервер раздает в коллекции модифицированные запросы, в которых для каждого термина сообщается глобальное значение его обратной частоты (IDf в терминах традиционного IR). Для этого на всех "собирающих" серверах хранится глобальная статистика терминов. Она изменяется медленно, поэтому обновляется относительно редко. Статистика подсчитывается по считающейся наиболее универсальной — вебовской — коллекции. Таким образом, каждая поисковая машина ищет ответ на запрос с назначенными "сверху" глобальными частотами, и значения релевантности, вычисляемые в разных коллекциях, можно считать последовательными и вычисляемыми "в одной системе координат". Модификации запросов этим не ограничиваются, и для специализированных коллекций (например, "энциклопедии") могут быть и другими, в том числе и очень специфическими.
4. Третья фаза обработки запроса: исполнение и ранжирование запроса в коллекциях — запрос выполняется паралельно для всех коллекций.
Следует отметить, что веб-коллекции документов распределены по машинам произвольно и, вообще говоря, могут быть расположены все вместе на одной машине. Слияние результатов производится на том из собирающих (метапоисковых) веб-серверов, на который попадал пользователь при заходе по адресу www.yandex.ru. Процесс раздачи запроса, описанный здесь, позволяет корректно ранжировать слитый результат. При этом не требуется переранжирование результатов, полученных из разных неоднородных коллекций с использованием локальных IDF, а также не нужен динамический обмен данными между источниками для вычисления глобальнойIDF.
1.2.1. "Пауки"
Мы ищем в Яндексе информацию и новости, картинки и значения слов, товары и услуги. На сегодняшний день в базе данных накоплена информация о миллионах документов и сайтов, огромном количестве новостей, графических изображений, сотнях тысяч предлагаемых товаров и услуг. За обновление информации в ней отвечают различные роботы.
Вот они, те роботы, которые выполняют основную работу по поиску и индексированию информации:
□ Yandex/1.01.001 (compatible; Win16; I) — основной индексирующий робот;
□ Yandex/1.01.001 (compatible; Win16; P) — индексатор картинок;
□ Yandex/1.01.001 (compatible; Win16; H) — робот, определяющий зеркала сайтов;
□ Yandex/1.02.000 (compatible; Win16; F) — робот, индексирующий пиктограммы сайтов (favicons);
□ Yandex/1.03.003 (compatible; Win16; D) — робот, обращающийся к странице при добавлении ее через форму "Добавить URL";
□ Yandex/1.03.000 (compatible; Win16; M) — робот, обращающийся при открытии страницы по ссылке "Найденные слова";
□ YaDirectBot/1.0 (compatible; Win16; I) — робот, индексирующий страницы сайтов, участвующих в рекламной сети Яндекса.
А кроме них есть и несколько агентов, которые занимаются проверкой доступности сайта или документа, на который стоит ссылка в соответствующем сервисе. Их тоже несколько:
□ Yandex/2.01.000 (compatible; Win16; Dyatel; C) — "простукивалка" Яндекс. Каталога. Если сайт недоступен в течение нескольких дней, он снимается с публикации. Как только сайт начинает отвечать, он автоматически появляется в Каталоге.;
□ Yandex/2.01.000 (compatible; Win16; Dyatel; Z) — "простукивалка" Яндекс. Закладок. Ссылки на недоступные сайты помечаются серым цветом;
□ Yandex/2.01.000 (compatible; Win16; Dyatel; D) — "простукивалка" Яндекс. Директа. Она проверяет корректность ссылок из объявлений перед модерацией. Никаких автоматических действий не предпринимается;
□ Yandex/2.01.000 (compatible; Win16; Dyatel; N) — "простукивалка" Яндекс. Новостей. Она формирует отчет для контент-менеджера, который оценивает масштаб проблем и, при необходимости, связывается с партнером.
Если о наименованиях роботов информация не является закрытой (в любом случае, ее можно обнаружить в логах сайтов, которые эти роботы посещали), то сведения о том, на каком сетевом адресе работает тот или иной робот, закрыты. Связано это с необходимостью уменьшить вероятность некорректного использования этой информации в целях продвижения сайтов. С этой же целью сетевые адреса время от времени изменяются.
Зачем эта информация нужна вам? Если вы являетесь владельцем сайта, и у вас установлен механизм, собирающий информацию о ваших посетителях, в эти данные попадет и информация о посетивших ваш проект роботах. Вы будете в курсе, какие роботы и когда вас посещали и какие страницы просматривали.
1.2.2. Индекс
Огромный объем информации, размещенной в Интернете, приводит к разрастанию Индекса. С некоторой долей приближения информацию можно разделить на две категории — условно постоянную и переменную. К переменной информации можно отнести публикации информационных изданий и аналогичных сервисов, записи в блогах, предложения онлайновых магазинов, иные сервисы, где информация меняется с большой частотой.
Обработка быстроменяющейся информации потребовала иного подхода. Были разработаны новые технологии и алгоритмы, новые базы и поисковые роботы. Каждой отдельной базе соответствовал собственный Индекс. Поисковые базы были разработаны для поиска по словарям и энциклопедиям, по каталогу сайтов, по предложениям интернет-магазинов, новостям и блогам.
Но какие бы новые технологии ни создавались, какими бы совершенными ни становились технические средства, объем накапливаемой информации заставляет наращивать вычислительные мощности. Если первый Индекс размещался на обычном компьютере, стоявшем в буквальном смысле "в ногах" у разработчика, то теперь для размещения аппаратных средств построены специальные помещения, оборудованные всем необходимым для обеспечения непрерывной работы. А компьютер, положивший начало поисковой системе, теперь находится на выставке раритетов Яндекса.
1.2.3. Поисковый механизм
Начиная выполнять поиск с помощью Яндекса, мы может в явном виде указать, в какой базе (коллекции документов, типе документов) следует выполнять поиск. Если мы не указываем этого, то на основе анализа запроса Яндекс самостоятельно делает допущение о приоритете специализированной коллекции над основной, самостоятельно подбирает подходящую к запросу рубрику каталога.
Чаще всего для поиска используются все базы. При этом собирающий сервер раздает в них модифицированные запросы, прошедшие предварительную обработку. Эта обработка заключается в том, что каждому термину в запросе сообщается глобальное значение его обратной частоты, подсчитываемой по коллекции веб-страниц. Такая обработка требуется для того, чтобы поиск велся по единым правилам, и значения релевантности, вычисляемые в разных коллекциях, можно было бы считать последовательными и вычисляемыми "в одной системе координат".
Модификации запросов этим не ограничиваются, и для специализированных коллекций (например, "энциклопедий") могут быть и другими, в том числе и очень специфическими.
Запрос выполняется параллельно для всех коллекций, а слияние результатов, как и указывалось ранее, производится на том из собирающих (метапоисковых) веб-серверов, на который попадал пользователь при заходе по адресу www.yandex.ru. Результаты поиска по наиболее крупным источникам, если в них найден хоть один ответ, показываются рядом со ссылками из веба (справа — одна картинка и ссылка на остальные, а также ответ Маркета). Ответ остальных источников может показываться сверху или снизу результатов поиска, если он оказался достаточно релевантным — так работают Новости, Энциклопедии, Каталог.