pgvector, ApsaraDB RDS for PostgreSQL'e vektör depolama ve benzerlik arama özelliği ekler. Makine öğrenimi modelleri tarafından oluşturulan gömme (embedding) verilerini depolamak ve bunları kosinüs mesafesi, Öklid mesafesi veya iç çarpım yöntemleriyle sorgulamak için bu uzantıyı kullanabilirsiniz.
Çalışma mantığı
Gömme (Embedding) verileri; metin, görüntü, ses veya video gibi verilerin yüksek boyutlu bir uzayda vektörler olarak ifade edilen sayısal temsilleridir. Anlamsal olarak benzer nesneler, birbirine yakın konumlanan vektörlere karşılık gelir.
Örneğin, bir elmayı [1, 1], bir muzu [1.2, 0.8] ve bir kediyi [6, 0.4] olarak temsil ederseniz, vektör araması muzun elmaya en benzer olduğunu gösterir; çünkü her ikisi de meyve olarak ortak özelliklere sahiptir.

pgvector aşağıdaki özellikleri destekler:
Tam en yakın komşu ve yaklaşık en yakın komşu (ANN) aramaları
Hızlı ANN araması için Hiyerarşik Navigable Small World (HNSW) dizinleri ve IVFFLAT paralel dizinleri
16.000 boyuta kadar vektör desteği; 2.000 boyuta kadar vektörler üzerinde dizin oluşturma imkanı
Mesafe ölçütleri: L2 Öklid mesafesi, kosinüs benzerliği ve iç çarpım
Ek işlemler: L1 mesafesi, eleman bazında çarpım ve toplam toplama işlemi
Ön koşullar
Başlamadan önce şunlardan emin olun:
RDS örneğiniz PostgreSQL 14 veya üzeri bir sürüm çalıştırıyor olmalı ve küçük motor sürümü 20230430 veya üzeri olmalıdır. PostgreSQL 17 için küçük motor sürümünün 20241030 veya üzeri olması gerekir.
RDS örneği için ayrıcalıklı bir hesap mevcut olmalıdır.
Büyük motor sürümünü yükseltmek için bkz. ApsaraDB RDS for PostgreSQL örneğinin büyük motor sürümünü yükseltme . Küçük motor sürümünü güncellemek için bkz. ApsaraDB RDS for PostgreSQL örneğinin küçük motor sürümünü güncelleme . Ayrıcalıklı bir hesap oluşturmak için bkz. Hesap oluşturma .
Uzantıyı yükleme
Konsoldan yükleme (önerilen)
Örnekler sayfasına gidin. Üst gezinme çubuğundan RDS örneğinizin bulunduğu bölgeyi seçin. Örnek kimliğine tıklayın.
Sol gezinme bölmesinde Plug-ins öğesine tıklayın.
-
Extension Marketplace sekmesinde vektör uzantısını bulun ve Install seçeneğine tıklayın. Alternatif olarak, Extension Management sekmesine geçiş yapın, vektör uzantısını arayın ve Actions sütunundaki Install seçeneğine tıklayın.

Açılan iletişim kutusunda Database Name ve Database Account alanlarını belirtin, ardından Install seçeneğine tıklayın.
Örnek durumu Maintaining Instance durumundan Running durumuna geçtiğinde uzantı yüklenmiş olur.
Uzantıyı güncellemek veya kaldırmak için:
Extension Management sekmesinde Installed Extensions bölümüne gidin, ilgili uzantıyı bulun ve Actions sütunundaki Upgrade Version veya Uninstall seçeneğine tıklayın.
Upgrade Version seçeneği görünmüyorsa uzantı zaten en son sürümdedir.
SQL ile yükleme
Bu işlemler ayrıcalıklı bir hesap gerektirir. Böyle bir hesap oluşturmak için bkz. Hesap oluşturma.
-- Create
CREATE EXTENSION IF NOT EXISTS vector;
-- Update
ALTER EXTENSION vector UPDATE [ TO new_version ];
-- Delete
DROP EXTENSION vector;
new_version , pgvector uzantısının hedef sürümüdür. Sürüm geçmişi ve özellikler için pgvector belgelerini inceleyin.
Vektörleri depolama ve sorgulama
Bu bölümde gömme verilerinin depolanması ve benzerlik aramalarının nasıl yapılacağı anlatılmaktadır. Tam API referansı için pgvector belgelerine bakın.
Tablo oluşturma
CREATE TABLE items (
id bigserial PRIMARY KEY,
item text,
embedding vector(2)
);
Bu örnekte açıklama amacıyla 2 boyutlu vektörler kullanılmıştır. pgvector 16.000 boyuta kadar destekler.
Vektör ekleme
INSERT INTO items (item, embedding)
VALUES
('Apple', '[1,1]'),
('Banana', '[1.2,0.8]'),
('Cat', '[6,0.4]');
Benzerliğe göre sorgulama
Sonuçları benzerliğe göre sıralamak için bir mesafe operatörü kullanın. Mesafe ne kadar kısa olursa, öğeler o kadar benzer demektir.
Mesafe operatörleri:
| Operatör | Ölçüt |
|---|---|
<-> |
L2 (Öklid) mesafesi |
<=> |
Kosinüs mesafesi |
<#> |
İç çarpım |
Temel benzerlik sorgusu:
-- Find items most similar to Banana, ranked by cosine distance
SELECT item,
embedding <=> '[1.2, 0.8]' AS cosine_distance
FROM items
ORDER BY cosine_distance;
Örnek çıktı:
item | cosine_distance
--------+------------------------
Banana | 0
Apple | 0.019419362524530137
Cat | 0.13289443670962842
0mesafesi tam eşleşmeyi gösterir.0.019mesafesi yüksek benzerliği gösterir.0.133mesafesi düşük benzerliği gösterir.
İş gereksinimlerinize göre düşük benzerliğe sahip sonuçları hariç tutmak amacıyla bir benzerlik eşiği belirtebilirsiniz.
Dizin oluşturma
Dizin olmadan pgvector, tüm tablo üzerinde tam arama yapar. Büyük veri kümeleri için ANN aramalarını hızlandırmak üzere bir vektör dizini oluşturun.
HNSW dizini oluşturma
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
Parametreler:
| Parametre | Açıklama |
|---|---|
m |
Her katmandaki düğüm başına maksimum bağlantı sayısı. Daha yüksek değerler graf yoğunluğunu, geri çağırma oranını ve dizin oluşturma ile sorgulama için gereken süreyi artırır. |
ef_construction |
Dizin oluşturma sırasında kullanılan aday kümesinin boyutu. Daha yüksek değerler, dizin oluşturma ve sorgulama süresi pahasına geri çağırmayı iyileştirir. |
Erişim yöntemleri (vector_cosine_ops alanı):
| Değer | Mesafe ölçütü |
|---|---|
vector_cosine_ops |
Kosinüs mesafesi |
vector_l2_ops |
L2 (Öklid) mesafesi |
vector_ip_ops |
İç çarpım |
IVF dizini oluşturma
CREATE INDEX ON items USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
Parametreler:
| Parametre | Açıklama |
|---|---|
lists |
Veri kümesinin parçalandığı liste sayısı. Daha fazla liste daha hızlı arama sağlar ancak geri çağırmayı azaltabilir. lists > 2000 olduğunda ERROR: memory required is xxx MB, maintenance_work_mem is xxx MB hatası alabilirsiniz; bunu çözmek için maintenance_work_mem değerini artırın. Bkz. Örnek parametrelerini ayarlama. |
ivfflat.probes |
Bir sorgu sırasında taranacak liste sayısı. Daha fazla prob geri çağırmayı iyileştirir ancak aramayı yavaşlatır. |
ivfflat.probes değerini oturum veya işlem düzeyinde ayarlayın:
-- Session level
SET ivfflat.probes = 10;
-- Transaction level
BEGIN;
SET LOCAL ivfflat.probes = 10;
SELECT ...;
COMMIT;
ivfflat.probes değeri, dizin oluşturma sırasında kullanılan lists değerine eşitse dizin yok sayılır ve bunun yerine tam tablo taraması çalıştırılır. Bu durum arama performansını önemli ölçüde düşürebilir.
Veri kümenize ve geri çağırma gereksinimlerinize bağlı olarak ivfflat.probes değerini lists değeriyle birlikte optimize edin.
Performans verileri
HNSW ve IVF dizinlerine ilişkin kıyaslama verileri için bkz.:
Sonraki adımlar
pgvector üzerine üretim amaçlı yapay zeka uygulamaları geliştirin: