Привет! Это команда специализированных индексов поиска.
Миллионы пользователей каждый день ищут товары на Ozon. Чтобы предложить релевантные товары, поиску нужно учитывать не только текст запроса, но и сотни факторов: доступность товара в регионе, сроки доставки, итоговую цену со скидками. За эти факторы отвечают специализированные индексы — отдельные высокопроизводительные структуры данных, которые в реальном времени обогащают поисковую выдачу точной информацией о каждом товаре.
Мы строим распределённую систему специализированных индексов, которая собирается и обновляется через потоковую обработку на Apache Flink и выдаёт ответы за миллисекунды под нагрузкой в десятки тысяч запросов в секунду.
Основные задачи команды
Разрабатываем и поддерживаем индекс доступности — фильтруем товары, которые недоступны для доставки в регион пользователя с учётом всей логистической цепочки.
Разрабатываем и поддерживаем индекс сроков доставки — показываем только те товары, которые укладываются в заданный пользователем временной промежуток.
Проектируем индекс цен — точное определение цены товара в поиске с учётом логистики, региональных коэффициентов и пользовательских скидок.
Строим надёжные пайплайны потоковой обработки данных на Flink для постоянной синхронизации индексов с мастер-данными.
Оптимизируем время построения и обновления индексов, чтобы изменения в логистике или ценах доходили до поиска за минуты, а не часы.
Интегрируемся с командами ранжирования, чтобы специализированные индексы эффективно использовались в формулах поиска.
Проектируем архитектуру хранения: балансируем между полнотой данных, скоростью записи и чтения, потреблением памяти.
Вы будете
Проектировать и разрабатывать новые специализированные индексы (в том числе индекс цен) — от исследования требований до продакшена.
Писать высоконагруженный код на Java, работающий под нагрузкой тысяч RPS с жёсткими SLA по latency.
Работать с Apache Flink — строить потоковые пайплайны для сбора, агрегации и доставки данных в индекс.
Оптимизировать структуры данных и форматы хранения для быстрого поиска и фильтрации (битовые карты, compressed sorted sets, вещественные числа с заданной точностью).
Участвовать в интеграции индексов в поисковый движок.
Проектировать A/B-эксперименты и следить за метриками качества поиска при изменениях в индексах.
Нам важно
Хорошее знание Java и опыт разработки от 5 лет.
Понимание классических алгоритмов и структур данных (особенно работающих с множествами, диапазонами, эффективной сериализацией).
Опыт разработки многопоточных приложений и работы с распределёнными системами.
Опыт использования реляционных СУБД и/или NoSQL-хранилищ (Cassandra, ScyllaDB, Redis).
Умение тестировать собственный код и работать с чужой кодовой базой.
Ответственность и аккуратность, готовность доводить задачи до конца.
Умение работать в команде и договариваться с продуктовыми и DS-командами.
Опыт работы с Apache Flink (или другими стриминговыми движками: Kafka Streams, Spark Streaming).
Опыт разработки специализированных поисковых индексов или работы с Lucene / Elasticsearch / OpenSearch.
Опыт алгоритмической разработки: сжатие данных, BitSet / RoaringBitmap, range-индексы, работа с floating-point в условиях компромисса скорости и точности.
Опыт с протоколами gRPC, Avro / Protobuf.
Образование, связанное с математикой или Computer Science.
Понимание Data Science и/или ML Engineering (как модели ранжирования потребляют факторы из индексов).
Опыт работы с логистическими или ценообразовательными системами.