Recherche vectorielle avec pgvector
Utilisez l’extension pgvector pour stocker des représentations vectorielles et effectuer une recherche approximative des plus proches voisins avec ivfflat / HNSW.
Recherche vectorielle avec pgvector est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
À quoi servent les vecteurs ?
Les représentations vectorielles encodent le sens. Deux documents portant sur le même sujet ont des vecteurs similaires. La recherche vectorielle permet la recherche sémantique, le RAG (génération augmentée par récupération) et les recommandations.
Activer pgvector
L'extension est largement disponible (RDS, Cloud SQL et Supabase l'intègrent) :
CREATE EXTENSION vector;Colonne vectorielle
Définir une colonne avec la dimension de votre modèle de représentation vectorielle :
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.Insérer des représentations vectorielles
Insérer le vecteur sous forme de littéral de tableau :
INSERT INTO docs (title, body, embedding)
VALUES ('SQL Course', 'Learn SQL', '[0.013, -0.024, ...]');Opérateurs de distance
pgvector en fournit trois :
<->— distance euclidienne (L2)<#>— produit scalaire interne négatif<=>— distance cosinus (la plus courante pour les représentations vectorielles)
Recherche du voisin le plus proche
Rechercher les documents les plus proches d'un vecteur de requête :
SELECT id, title, 1 - (embedding <=> $1) AS similarity
FROM docs
ORDER BY embedding <=> $1
LIMIT 10;Index IVFFlat
Pour les grands ensembles de données, construire un index ANN approximatif du voisin le plus proche :
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;Index HNSW (PG 16+)
Dans de nombreux cas, il offre un meilleur rappel et une latence plus faible qu'IVFFlat :
CREATE INDEX docs_embedding_hnsw
ON docs USING HNSW (embedding vector_cosine_ops);
SET hnsw.ef_search = 100;Recherche vectorielle filtrée
Combiner les filtres vectoriels et structurés :
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.Modèle RAG
Récupérer N documents pertinents par représentation vectorielle, puis les fournir comme contexte à un LLM :
-- 1. Embed user query
-- 2. SELECT top-N docs by cosine
-- 3. Send docs + query to LLM
-- 4. Return LLM's answer to userRecherche hybride
Combiner le vectoriel et le lexical (tsvector) pour obtenir les meilleurs résultats — aucun des deux ne trouve tout à lui seul :
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;Choix de la dimension
Des représentations vectorielles plus grandes sont plus précises, mais nécessitent davantage de stockage et sont plus lentes. De nombreuses applications fonctionnent très bien avec des modèles de 384 à 768 dimensions. Choisissez un modèle et gardez-le.
Récapitulatif
pgvector ajoute une recherche vectorielle native à Postgres.
- Type de colonne vector(N)
- Index IVFFlat / HNSW
- Distance cosinus via <=> pour les représentations vectorielles
- Recherche hybride avec la FTS pour un meilleur rappel
Vérification rapide
Vous effectuez une recherche par similarité sémantique à l'aide de représentations vectorielles OpenAI. Quel opérateur de distance pgvector utilisez-vous généralement ?
Questions Fréquemment Posées
La leçon « Recherche vectorielle avec pgvector » est-elle gratuite ?
Oui — le texte complet de « Recherche vectorielle avec pgvector » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Recherche vectorielle avec pgvector » ?
Utilisez l’extension pgvector pour stocker des représentations vectorielles et effectuer une recherche approximative des plus proches voisins avec ivfflat / HNSW. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Recherche vectorielle avec pgvector » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Recherche par trigrammes (pg_trgm) pour la correspondance approximative
- Recherche en texte intégral avec tsvector et GIN
- Indexation géospatiale avec PostGIS
- Recherche vectorielle avec pgvector