Выбор ответа Middle Эмбеддинги и векторный поиск обновлено

pgvector или отдельная векторная БД

Вопрос

Сервис на PostgreSQL, 2 млн документов, нужен семантический поиск с фильтрами по клиенту и статусу. Какой выбор разумнее для старта?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: pgvector в той же базе: векторы рядом с данными, фильтры на SQL, индекс HNSW. Два миллиона векторов pgvector держит нормально, при этом остаются транзакции, бэкапы и фильтры по обычным колонкам.

Варианты ответа

  1. Обязательно отдельная векторная БД: PostgreSQL не умеет индексировать векторы и ищет только перебором
  2. pgvector в той же базе: векторы рядом с данными, фильтры на SQL, индекс HNSWправильный ответ
  3. Хранить векторы в Redis как строки и перебирать их в коде приложения на каждый запрос
  4. Не строить индекс, а пересчитывать эмбеддинги всех документов на каждый запрос

Разбор

Два миллиона векторов pgvector держит нормально, при этом остаются транзакции, бэкапы и фильтры по обычным колонкам. Отдельная векторная БД нужна при сотнях миллионов векторов, сложном шардировании или особых возможностях. Утверждение про PostgreSQL ложно: у pgvector есть HNSW и IVFFlat. Перебор строк в коде и пересчёт эмбеддингов на каждый запрос не масштабируются.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.