Утечка исходного кода поиска Яндекса
Приветствую! Давеча пользователи форума Hacker News сообщили о великолепной находке - исходные коды сервисов Яндекса почти на 45 GB.
Представители Яндекса уже подтвердили слив данных, так что это не фейк и не розыгрыш. Все папки внутри архива датируются 24.02.2022, но некоторые логи созданы в мае. Видимо, кто-то решил прихватить с собой флешку с ценной информацией перед увольнением :)
В скаченном архиве много папок, но меня заинтересовали следующие: antirobot, captcha, extsearch, kernel, metrika, robot, search, wmconsole.
Бегло проанализировав содержимое можно констатировать факт, что был слит полный репозиторий Search Engine and Indexing Bot.
В папке kernel.tar\web_factors_info\ лежит файл с 1923 факторами ранжирования Яндекса, включая TG_DEPRECATED (устаревшие, некоторые из них ссылаются на обновленную версию). Вот несколько интересные из них:
Factor {
Index: 42
CppName: "FI_IS_MAIN_PAGE"
Name: "IsMainPage"
Tags: [TG_DOC, TG_STATIC, TG_BINARY, TG_REARR_USE, TG_UNDOCUMENTED, TG_OFTEN_ZERO, TG_L2, TG_NN_OVER_FEATURES_USE]
Description: "Если главная страница владельца (чаще всего домен второго уровня, например xxxx.ru), то фактор равен 1. Для бомжатников, хостингов, личных блогов и т.д. (например, лайфджорнал, народ.ру и пр.) - домены третьего уровня (типа xxxxx.narod.ru) так же будут иметь фактор равный 1."
Authors: ["aalekseev", "denplusplus"]
Responsibles: "alsafr"
}
Factor {
Index: 1908
CppName: "FI_RANDOM_COMMERCIAL"
Name: "RandomCommercial"
Tags: [TG_OWNER, TG_STATIC, TG_OFTEN_ZERO, TG_META, TG_DATA_FROM_SAASKV, TG_UNUSED, TG_NOT_01]
Description: "'Случайный' фактор для коммерческих сайтов."
Wiki: "https://wiki.yandex-team.ru/jandekspoisk/kachestvopoiska/relevance/web/factors/RandComm/"
Ticket: "SEARCHSPAM-14815"
Authors: ["tyamgin"]
Responsibles: ["tyamgin", "ashagarov", "sdormidontov"]
ImplementationTime: "2020-03-11"
MinValue: -1.0
}
Factor {
Index: 1895
CppName: "FI_HOST_BIZ_KERNEL_PERCENTILE"
Name: "HostBizKernelPercentile"
Ticket: "SEARCHSPAM-14593"
Wiki: "https://wiki.yandex-team.ru/JandeksPoisk/Antispam/biz-kernel-basic-description/"
Tags: [TG_USER, TG_HOST, TG_STATIC, TG_L2, TG_UNUSED]
Description: "Показатель качества сайта с точки зрения факторов про пользовательское поведение, агрегированных до владельцев."
Authors: ["ashagarov"]
Responsibles: ["ashagarov", "sdormidontov"]
ImplementationTime: "2019-08-28"
}
Factor {
Index: 705
CppName: "FI_DOC_CREATE_MONTH"
Name: "DocCreateMonth"
Ticket: "BUKI-1583"
Wiki: "http://wiki.yandex-team.ru/JandeksPoisk/KachestvoPoiska/ObshayaFormula/TekushhieKomponenty/DocMonthFactors"
Tags: [TG_DATE, TG_DOC, TG_DOC_TEXT, TG_STATIC, TG_DEPRECATED, TG_UNDOCUMENTED, TG_L2]
Description: "Время создания документа с точностью до месяца 1.0 -- текущий месяц, 0 —- 10 лет назад и старше. Временно отключен"
Authors: "bochkarev"
Responsibles: "bochkarev"
}
Factor {
Index: 6
CppName: "FI_LINK_RELEV_ALL_WORDS"
Name: "LRp1"
Group: "Dynamic"
Tags: [TG_DOC, TG_DYNAMIC, TG_LINK_TEXT, TG_UNDOCUMENTED, TG_DEPRECATED]
Description: "(strict) есть все слова запроса в одном линке."
Authors: ["gulin", "leo"]
Responsibles: ["gulin", "leo"]
}
Как видно, есть описание алгоритмов рандомизации в коммерческой выдаче, а также много алгоритмов по поведенческим факторам ранжирования.
На самом деле, я ожидал увидеть код типа:
if ($pageOwner == yandex) {$rank = 1} else {$rank = rand()}
В некоторых случаях оно так и есть :)
Кроме того, был обнаружен файл с 318 факторами того, как Яндекс делает аналитику по запросам и затем по полученным данным ранжирует сайты, например:
Factor {
Index: 4
CppName: "FI_Q_DIVERSITY"
Name: "QDiversity"
Ticket: "FRESHNESS-3225"
Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_USER, TG_USER_SEARCH, TG_USER_SEARCH_ONLY, TG_REARR_USE, TG_OFTEN_ZERO, TG_L2]
Description: "Степень централизации точек, из которой задается запрос"
Authors: "denplusplus"
Responsibles: ["diver", "akhropov"]
MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetQDiversity()" }
DependsOn: [{Feature: ["QDiversity"], Slice: "begemot_query_factors"}]
}
Factor {
Index: 5
CppName: "FI_Q_DIVERSITY2"
Name: "Diversity2"
Ticket: "FRESHNESS-3225"
Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_USER, TG_USER_SEARCH, TG_USER_SEARCH_ONLY, TG_REARR_USE, TG_OFTEN_ZERO, TG_L2]
Description: "Географическая распределенность запроса"
Authors: "denplusplus"
Responsibles: ["diver", "akhropov"]
MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetDiversity2()" }
DependsOn: [{Feature: ["Diversity2"], Slice: "begemot_query_factors"}]
}
Factor {
Index: 6
CppName: "FI_HOUR_DIVERSITY"
Name: "HourDiversity"
Ticket: "FRESHNESS-3225"
Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_USER, TG_USER_SEARCH, TG_USER_SEARCH_ONLY, TG_REARR_USE, TG_OFTEN_ZERO, TG_L2]
Description: "Степень выраженности задания запросов в разное время суток"
Authors: "denplusplus"
Responsibles: ["diver", "akhropov"]
MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetHourDiversity()" }
DependsOn: [{Feature: ["HourDiversity"], Slice: "begemot_query_factors"}]
}
Factor {
Index: 60
CppName: "FI_DIVERSITY_CATEG_NEED_MAP"
Name: "DiversityCategNeedMap"
Ticket: "BUKI-1213"
Tags: [TG_DYNAMIC, TG_QUERY_ONLY, TG_THEME_CLASSIF, TG_UNDOCUMENTED, TG_L2]
Description: "0 или 1 в зависимости от наличия в запросе явно выраженного интента need_map из разнообразия"
Authors: "stasd07"
Responsibles: "stasd07"
MoveFromFactorSource: { Sources: { ClassName: "NBg::NProto::TQueryFactors", Arg: "source" }, Expression: "source.GetDiversityCategNeedMap()" }
DependsOn: [{Feature: ["DiversityCategNeedMap"], Slice: "begemot_query_factors"}]
}
Скачать полный файл с факторами ранжирования можно в моем GitHub.
Теперь нас ждет множество часов изучения данных, как на самом деле работают сервисы Яндекса, развенчание множества заблуждений, мифов и легенд, связанных с SEO, и корректировка стратегии продвижения проектов.
Помимо факторов ранжирования занятно посмотреть как технически настроено цензурирование контента в новостях и поиске, какой код отвечает за увеличение цены в Маркете, если заходишь с устройства Apple, почему в такси у тебя постоянно «Повышенный спрос», что записывает «Умная колонка Яндекса», и еще много чего.
Погнали изучать! :)