Конференция разработчиков
высоконагруженных систем
Хочу быть в курсе событий!
Полнотекстовый поиск в Почте Mail.Ru
Требования, предъявляемые к поиску по почте, отличаются от тех, которые обычно предъявляют к "большим" поисковым системам. Это становится причиной применения совершенно других, нестандартных технологических решений. В докладе я расскажу про устройство полнотекстового поиска в Почте Mail.Ru.
Основные темы, которых мы коснемся:
– Чем поиск по почте отличается от «большого» веб-поиска? Данные не хранятся в одном большом индексе, для каждого почтового ящика индекс свой: пополнять «большой» индекс – это фактически постоянно держать его в памяти, а это – дорого. Также стоит отметить, что почта – вещь интимная, и допустить «смешивание» данных (например, из-за ошибки разработчика) нельзя. Кроме того, для поиска по почте характерны более серьезные требования к полноте поисковой выдачи. Недопустимо, чтобы пропало даже одно письмо (баг с потерей письма всегда ставится в блокирующем приоритете).
– Нерентабельность кеширования индексов. Обычно по почте пользователи ищут не более, чем по 2 запроса подряд. Держать их индекс в памяти долгое время – дорого. Поэтому индекс устроен таким образом, что необходимую информацию из него можно прочитать с диска в минимальное время (2-3 обращения к диску, целиком индекс никогда не читается, лишь его малая часть).
– Токенизация – разбиение текстов на отдельные слова. Рассмотрим алгоритм и причины его выбора.
– Процесс пополнения индекса с минимальными затратами и основания для перестройки индексов. Индекс должен обновляться сразу, как только произошли изменения. Столь частые изменения индекса вызывают повышенную нагрузку на диск (приходится переписывать файл с индексом целиком, т.к. данные в нем – сортированные). Чтобы этого избежать, свежие данные храним в несортированном виде (в виде лога транзакций), по которому осуществляем последовательный поиск. Добавление информации в этот лог – одна операция записи в конец файла. Перестраивается индекс тогда, когда скорость поиска становится ниже заданного порога.
– Рассмотрим сам процесс поиска по индексу и последующие операции над полученной выборкой: применение фильтров, ранжирование (в отличие от «большого» web-поиска, в поиске по почте ранжирование тривиально – это всего лишь сортировка по дате), «подсветка» найденных слов в результате.
– Строение индекса саджестов (поисковых подсказок), обоснование его оптимальности (максимальная скорость получения результата при разумном размере индекса), а также сам алгоритм получения выборки саджестов.
– Поговорим об отказоустойчивости и об измерении качества поиска.