0Pricing
SQL Academy · Lekcja

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 user

Wyszukiwanie 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

  1. Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego
  2. Wyszukiwanie pełnotekstowe za pomocą tsvector i GIN
  3. Indeksowanie geoprzestrzenne za pomocą PostGIS
  4. Wyszukiwanie wektorowe za pomocą pgvector
← Powrót do SQL Academy