Поиск в каталоге: SQL, full-text и векторы

Когда достаточно PostgreSQL и где semantic search действительно даёт пользу.

Зачем разбирать эту тему

Пользователь может искать точный артикул, название с опечаткой или описывать потребность естественным языком. Это разные задачи, и один алгоритм редко решает их одинаково хорошо.

Как устроена задача на практике

Для небольшого каталога хватает индексов PostgreSQL. `pg_trgm` помогает с fuzzy matching, full-text добавляет лингвистику и веса полей.

Что важно в production

Elasticsearch/OpenSearch оправдан сложными facets и большим объёмом. Векторный поиск полезен для смысла, но хуже точных кодов, поэтому часто используется hybrid схема.

Типичные ошибки

Главная ошибка — выбирать технологию или паттерн раньше, чем сформулирован пользовательский сценарий и ограничения. Второй частый промах — проверять решение только на идеальном happy path и не продумывать восстановление после сбоя, повторный запрос и права доступа.

Практический вывод

Качество оцениваем на реальных запросах: zero-result rate, клики и конверсия после поиска. Технологию усложняем только после измерения.

  • фиксируйте допущения до реализации;
  • проверяйте решение на реальных данных и устройствах;
  • сохраняйте наблюдаемость и возможность безопасного отката;
  • усложняйте архитектуру только когда это подтверждает задача.
PSP / EDITORIAL

Есть задача, где это решение нужно применить на практике?

← Все материалыОбсудить проект ↗