Wyszukiwanie wektorowe za pomocą pgvector
Używać rozszerzenia pgvector do przechowywania embeddingów i wykonywania przybliżonego wyszukiwania najbliższych sąsiadów za pomocą ivfflat / HNSW
Wyszukiwanie wektorowe za pomocą pgvector to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Do czego służą wektory?
Osadzenia kodują znaczenie. Dwa dokumenty dotyczące tego samego tematu mają podobne wektory. Wyszukiwanie wektorowe zasila wyszukiwanie semantyczne, RAG (retrieval-augmented generation) oraz rekomendacje.
Włączanie pgvector
To rozszerzenie jest powszechnie dostępne (RDS, Cloud SQL i Supabase mają je wbudowane):
CREATE EXTENSION vector;Kolumna wektorowa
Zdefiniuj kolumnę z wymiarem właściwym dla modelu osadzeń:
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.Wstawianie osadzeń
Wstaw wektor jako literał tablicowy:
INSERT INTO docs (title, body, embedding)
VALUES ('SQL Course', 'Learn SQL', '[0.013, -0.024, ...]');Operatory odległości
pgvector udostępnia trzy operatory:
<->— odległość euklidesowa (L2)<#>— ujemny iloczyn skalarny<=>— odległość kosinusowa (najczęściej używana dla osadzeń)
Wyszukiwanie najbliższych sąsiadów
Znajdź dokumenty najbliższe wektorowi zapytania:
SELECT id, title, 1 - (embedding <=> $1) AS similarity
FROM docs
ORDER BY embedding <=> $1
LIMIT 10;Indeks IVFFlat
W przypadku dużych zbiorów danych utwórz przybliżony indeks wyszukiwania najbliższych sąsiadów (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;Indeks HNSW (PG 16+)
W wielu przypadkach zapewnia lepszą kompletność wyników i mniejsze opóźnienia niż IVFFlat:
CREATE INDEX docs_embedding_hnsw
ON docs USING HNSW (embedding vector_cosine_ops);
SET hnsw.ef_search = 100;Filtrowane wyszukiwanie wektorowe
Połącz filtry wektorowe i strukturalne:
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.Wzorzec RAG
Pobierz N odpowiednich dokumentów na podstawie osadzeń i przekaż je jako kontekst do LLM:
-- 1. Embed user query
-- 2. SELECT top-N docs by cosine
-- 3. Send docs + query to LLM
-- 4. Return LLM's answer to userWyszukiwanie hybrydowe
Połącz wyszukiwanie wektorowe i leksykalne (tsvector), aby uzyskać najlepsze wyniki — żadne z nich osobno nie wychwytuje wszystkiego:
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;Wybór wymiarowości
Większe osadzenia są dokładniejsze, ale wymagają więcej miejsca i działają wolniej. Wiele aplikacji działa dobrze z modelami o wymiarach 384–768. Proszę wybrać jeden model i konsekwentnie go używać.
Podsumowanie
pgvector dodaje do Postgresa pełnoprawne wyszukiwanie wektorowe.
- Typ kolumny vector(N)
- Indeksy IVFFlat/HNSW
- Odległość kosinusowa za pomocą <=> dla osadzeń
- Wyszukiwanie hybrydowe z FTS zapewnia najlepszą kompletność wyników
Szybki test
Wyszukują Państwo według podobieństwa semantycznego, używając osadzeń OpenAI. Którego operatora odległości pgvector zwykle się używa?
Często zadawane pytania
Czy lekcja „Wyszukiwanie wektorowe za pomocą pgvector” jest bezpłatna?
Tak — pełny tekst „Wyszukiwanie wektorowe za pomocą pgvector” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wyszukiwanie wektorowe za pomocą pgvector”?
Używać rozszerzenia pgvector do przechowywania embeddingów i wykonywania przybliżonego wyszukiwania najbliższych sąsiadów za pomocą ivfflat / HNSW Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wyszukiwanie wektorowe za pomocą pgvector”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego
- Wyszukiwanie pełnotekstowe za pomocą tsvector i GIN
- Indeksowanie geoprzestrzenne za pomocą PostGIS
- Wyszukiwanie wektorowe za pomocą pgvector