Скоринг, поиск и пайплайны, которые структурируют ваши данные
Превращаем сырые, хаотичные источники в структурированные данные, по которым ваш продукт может ранжировать, искать и подбирать. Это движки скоринга, персонализирующие выдачу под каждого пользователя, мгновенный полнотекстовый и гео-поиск и пайплайны загрузки, которые чистят и дедуплицируют внешние данные до состояния, которому можно доверять, — на PostgreSQL, без отдельного поискового сервиса, который нужно содержать и оплачивать.
Инженерия — простыми словами.
Логика живёт в SQL
Скоринг, классификация и определение категорий работают как детерминированный SQL по вычисляемым колонкам — быстро, проверяемо и объяснимо, без затрат на LLM и догадок. Один и тот же запрос даёт один и тот же результат каждый раз.
Поиск внутри Postgres
Полнотекстовый и нечёткий поиск используют pg_trgm и unaccent — опечатки и диакритика всё равно находятся, а поиск остаётся в вашей базе, без отдельного кластера Elasticsearch, который надо содержать и синхронизировать.
Режимы скоринга под пользователя
Ранжирование параметризовано профилем и режимом пользователя — один и тот же каталог перестраивается под каждого: строго или мягко, ближе или релевантнее — за счёт пересчёта весов на момент запроса, а не зашитого порядка.
Поиск по карте, который масштабируется
Гео-запросы используют расстояние по гаверсинусам для поиска рядом и Supercluster для кластеризации — тысячи пинов остаются плавными на карте, и нужные результаты всплывают, пока пользователь двигает и масштабирует.
От старта до запуска.
- 1
Описываем источники
Инвентаризируем сырые входы — фиды, скрейпы, экспорты — и определяем чистую структуру, которая реально нужна продукту для ранжирования и поиска.
- 2
Строим пайплайн
Пишем загрузку, которая парсит, нормализует, дедуплицирует и обогащает каждый источник, с валидацией, которая отсекает или помечает плохие записи, а не засоряет каталог.
- 3
Добавляем скоринг и поиск
Добавляем движок скоринга, полнотекстовый и гео-поиск и настраиваем релевантность на реальных запросах и реальных данных, а не на синтетике.
- 4
Проверяем и выпускаем
Тестируем ранжирование и загрузку на известных входах, замеряем производительность запросов на реальном объёме и выкатываем с индексами и задачами перегрузки данных.
Что на выходе и когда это подходит.
Результаты
- Пайплайн загрузки, превращающий сырые внешние источники в чистые структурированные записи без дублей
- Движок скоринга/ранжирования с персонализацией под пользователя или режим, реализованный в SQL
- Полнотекстовый и нечёткий поиск с устойчивостью к опечаткам и диакритике плюс фильтры, быстрые на объёме
- Гео-поиск: запросы расстояния и кластеризация на карте, готовые к тысячам точек
- Индексы, вычисляемые колонки и задачи перегрузки, задокументированные так, что система остаётся быстрой по мере роста данных
- Тесты, покрывающие логику ранжирования и корректность пайплайна на известных входах
Подходит, когда
- Вы агрегируете данные из множества внешних источников, и они нужны чистыми, без дублей и доступными для запросов
- Вам нужно персонализированное ранжирование или скоринг без затрат и непредсказуемости LLM
- Вам нужен быстрый полнотекстовый или картографический поиск, но не хочется содержать отдельный поисковый кластер
- Ваш каталог перерос наивную фильтрацию, и поиск стал медленным или нерелевантным
Выпустили пайплайн, который из ~1 500 сырых объявлений сделал ~1 200 чистых записей без дублей, с кластеризацией на карте и поиском рядом, и отдельный движок скоринга, персонализирующий рекомендации полностью в SQL.
Хотите так же для своего продукта?
Расскажите о цели — честно оценим объём.