SQL Academy · Урок

Векторный поиск с pgvector

Используйте расширение pgvector для хранения эмбеддингов и выполняйте приближённый поиск ближайших соседей с помощью ivfflat / HNSW

Урок 4 из 414 шагов

«Векторный поиск с pgvector» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Для чего нужны векторы?

Векторные представления кодируют смысл. Два документа об одной теме имеют похожие векторы. Векторный поиск используется для семантического поиска, RAG (генерации с дополнением найденными данными) и рекомендаций.

Подключение pgvector

Это расширение широко доступно (оно встроено в RDS, Cloud SQL и Supabase):

CREATE EXTENSION vector;

Векторный столбец

Определите столбец с размерностью, которую использует ваша модель векторных представлений:

CREATE TABLE docs (
  id BIGSERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  embedding vector(1536)
);

-- 1536 is OpenAI text-embedding-3-small dimension; varies by model.

Добавление векторных представлений

Добавьте вектор в виде литерала-массива:

INSERT INTO docs (title, body, embedding)
VALUES ('SQL Course', 'Learn SQL', '[0.013, -0.024, ...]');

Операторы расстояния

pgvector предоставляет три оператора:

  • <-> — евклидово расстояние (L2)
  • <#> — отрицательное скалярное произведение
  • <=> — косинусное расстояние (наиболее распространённый вариант для векторных представлений)

Поиск ближайших соседей

Найдите документы, наиболее близкие к вектору запроса:

SELECT id, title, 1 - (embedding <=> $1) AS similarity
FROM docs
ORDER BY embedding <=> $1
LIMIT 10;

Индекс IVFFlat

Для больших наборов данных создайте приближённый индекс ближайших соседей (ANN):

CREATE INDEX docs_embedding_idx
  ON docs USING IVFFLAT (embedding vector_cosine_ops)
  WITH (lists = 100);

-- Tune lists by row count: rule of thumb sqrt(N).
-- Set probes per query for accuracy:
SET ivfflat.probes = 10;

Индекс HNSW (PG 16+)

Во многих случаях он обеспечивает более высокую полноту и меньшую задержку, чем IVFFlat:

CREATE INDEX docs_embedding_hnsw
  ON docs USING HNSW (embedding vector_cosine_ops);

SET hnsw.ef_search = 100;

Векторный поиск с фильтрацией

Объедините векторные и структурированные фильтры:

SELECT id, title
FROM docs
WHERE language = 'en'
  AND created_at >= NOW() - INTERVAL '30 days'
ORDER BY embedding <=> $1
LIMIT 10;
-- For best perf, partial index on the filter.

Шаблон RAG

Получите N релевантных документов по векторному представлению и передайте их как контекст модели LLM:

-- 1. Embed user query
-- 2. SELECT top-N docs by cosine
-- 3. Send docs + query to LLM
-- 4. Return LLM's answer to user

Гибридный поиск

Объедините векторный и лексический поиск (tsvector) для лучших результатов — по отдельности ни один из них не находит всё:

SELECT id, title,
  0.6 * (1 - (embedding <=> $1)) + 0.4 * ts_rank(search_doc, $2) AS score
FROM docs
WHERE embedding <=> $1 < 0.7
   OR search_doc @@ $2
ORDER BY score DESC LIMIT 10;

Выбор размерности

Более крупные векторные представления точнее, но требуют больше места и работают медленнее. Многие приложения хорошо работают с моделями размерностью 384–768. Выберите одну модель и придерживайтесь её.

Итоги

pgvector добавляет в PostgreSQL полноценный векторный поиск.

  • Тип столбца vector(N)
  • Индексы IVFFlat/HNSW
  • Косинусное расстояние через <=> для векторных представлений
  • Гибридный поиск с FTS для лучшей полноты

Быстрая проверка

Вы ищете по семантическому сходству, используя векторные представления OpenAI. Какой оператор расстояния pgvector обычно используют?

Можно начать бесплатно

Изучай SQL с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
46
Уроки
183

Часто задаваемые вопросы

Урок «Векторный поиск с pgvector» бесплатный?

Да — полный текст урока «Векторный поиск с pgvector» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Векторный поиск с pgvector»?

Используйте расширение pgvector для хранения эмбеддингов и выполняйте приближённый поиск ближайших соседей с помощью ivfflat / HNSW Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Векторный поиск с pgvector»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Поиск по триграммам (pg_trgm) для нечёткого сопоставления
  2. Полнотекстовый поиск с tsvector и GIN
  3. Геопространственная индексация с PostGIS
  4. Векторный поиск с pgvector
← Назад к SQL Academy