Veri & Altyapı
Supabase pgvector Rehberi: PostgreSQL ile Vektör Arama ve Benzerlik Sorguları
Ayrı bir vektör veritabanı satın almadan PostgreSQL ve pgvector eklentisi ile HNSW indeksleri ve kosinüs benzerliği (cosine distance) sorgulama rehberi.
3 dk
Neden Tek Bir PostgreSQL Veritabanı Yeterlidir?
Pinecone veya Qdrant gibi harici vektör servisleri kullandığınızda kullanıcı verileri ile vektörler iki ayrı veritabanına bölünür (senkronizasyon ve veri tutarlılığı zorlaşır).
Supabase pgvector sayesinde ilişkisel tablolarınız (kullanıcılar, siparişler, izinler) ile embedding vektörleri aynı ACID uyumlu PostgreSQL içinde yaşar.
schema.sql
-- pgvector eklentisini aktif et
create extension if not exists vector;
-- Döküman tablosu ve 1536 boyutlu embedding kolonu
create table documents (
id bigserial primary key,
content text,
metadata jsonb,
embedding vector(1536)
);
-- HNSW indeksi oluştur (Milisaniyelik arama hızı için)
create index on documents using hnsw (embedding vector_cosine_ops);
-- Benzerlik arama SQL fonksiyonu
create or replace function match_documents (
query_embedding vector(1536),
match_threshold float,
match_count int
)
returns table (id bigint, content text, similarity float)
language sql stable
as $$
select id, content, 1 - (documents.embedding <=> query_embedding) as similarity
from documents
where 1 - (documents.embedding <=> query_embedding) > match_threshold
order by documents.embedding <=> query_embedding
limit match_count;
$$;Sıkça Sorulan Sorular
HNSW indeksi IVFFlat indeksinden neden daha iyidir?
HNSW (Hierarchical Navigable Small World), veri kümesi büyüdükçe çok daha yüksek recall (arama doğruluğu) ve milisaniyelik sorgu hızları sunar; yeniden eğitim gerektirmez.