Технология

Как работает Prayk

Prayk показывает объявления с азербайджанских сайтов в одном месте, отделяет дубликаты и сравнивает цены. Здесь описано, как устроены основные части системы.

Откуда берутся объявления

У объявлений на сайте два источника.

  • Объявления, которые пользователи и магазины сами размещают на Prayk.
  • Объявления, которые PraykBot читает с открытых азербайджанских сайтов объявлений и интернет-магазинов. Такое объявление всегда показывается с блоком «Источник объявления» и ссылкой на оригинальную страницу.
  • Бот регулярно перепроверяет объявления: удалённое в источнике объявление деактивируется и на Prayk.
О PraykBot →

Как находятся дубликаты

Одно и то же объявление часто публикуется на нескольких сайтах или от имени нескольких продавцов. Система сравнивает «отпечатки» изображений и текста каждого нового объявления с существующими — от дешёвой проверки к дорогой.

  • Тот же файл: байты изображения полностью совпадают.
  • Похожее изображение: изменённый размер или повторное сжатие (перцептивный хеш).
  • Похожий текст: слегка изменённые заголовок и описание (SimHash).
  • Содержание изображения: обрезанная картинка или картинка с добавленной надписью — по близости векторов, которые извлекает нейросеть.
  • Объявление автоматически считается «копией» только при сильном доказательстве; слабого сходства самого по себе недостаточно. Оригиналом считается объявление, опубликованное первым; на карточках видны метки «Оригинал» и «Копия».
  • Продавец, который обновляет или заново размещает своё объявление, копировщиком не считается.

Поиск

Поиск построен с учётом особенностей азербайджанского языка.

  • Запрос «menzil» находит «mənzil», «masin» — «maşın»: буквы ə, ı, ş, ç, ö, ü, ğ приравниваются к латинским аналогам.
  • Мелкие опечатки прощаются, по мере ввода появляются подсказки разделов, магазинов и объявлений.
  • Поиск по фото: находятся объявления, визуально похожие на загруженное изображение.
  • На фотографиях автомобилей распознаётся государственный номер — машину можно искать по номеру.
Поиск по номеру →

Рыночная цена

Каждую ночь по объявлениям за последние 90 дней для каждого сегмента считаются медианная цена и «обычный» диапазон цен. Слишком дешёвые и слишком дорогие объявления исключаются, сегмент с менее чем 8 объявлениями не показывается. Оценка «дешевле / дороже рынка» на странице объявления выводится из этих цифр.

Полная методология и таблица точности →

Рекомендации

Лента «Рекомендуемые» на главной странице строится по просмотренным вами объявлениям.

  • Какие разделы, города и ценовые диапазоны вы просматриваете.
  • Связи «смотревшие это объявление смотрели и эти».
  • Объявления, визуально похожие на просмотренные.
  • В настройках профиля можно самому выбрать интересы или отключить ненужные разделы.

Проверка VIN

VIN-код расшифровывается параллельно по нескольким открытым источникам, результаты объединяются: таблица кодов производителей (марка и страна), реестр NHTSA для рынка США, швейцарский реестр одобрения типа для европейского рынка. Кроме того, показываются объявления с этим VIN, замеченные на Prayk, и история их цены и пробега.

Проверить по VIN →

Защита телефонных номеров

Номер продавца приходит на страницу и в ответе API в замаскированном виде. Полный номер выдаётся только по нажатию «Показать номер», по короткоживущему ключу — это затрудняет массовый сбор номеров.

Техническая основа

Сервер
Написан на Go; весь API документирован открытым описанием OpenAPI.
Данные
Объявления хранятся в кластере MySQL, поисковый индекс — в Elasticsearch, векторы изображений — в Qdrant.
Модель изображений
Модель, вычисляющая сходство изображений (CLIP), работает на наших серверах.
Сайт и приложение
Сайт на Next.js, мобильное приложение на React Native; оба читают один и тот же API.

Подробнее