Векторный поиск с pgvector
Используйте расширение pgvector для хранения эмбеддингов и выполняйте приближённый поиск ближайших соседей с помощью ivfflat / HNSW
«Векторный поиск с 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 — локальная установка не требуется.
Все уроки этого курса
- Поиск по триграммам (pg_trgm) для нечёткого сопоставления
- Полнотекстовый поиск с tsvector и GIN
- Геопространственная индексация с PostGIS
- Векторный поиск с pgvector