lakebase_vector

Uzantı, lakebase_vector dizin türü aracılığıyla lakebase_ann Lakebase'e yaklaşık en yakın komşu (ANN) vektör araması ekler. Pgvector'a açılan bir eşlikçidir: aynı vektör türleri, uzaklık işleçleri ve sorgu söz dizimi değişiklik yapmadan çalışır.

Install

İlk olarak, proje ayarlarınızda Lakebase Arama'yı etkinleştirin . Ardından uzantıyı yükleyin:

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

anahtar CASCADE sözcüğü otomatik olarak bağımlılık olarak yüklenir pgvector .

Uzantı ve indeksleri yükseltin

Yeni bir Lakebase Search sürümü özellikler, düzeltmeler ve performans iyileştirmeleri ekleyebilir. Lakebase Search, Lakebase güncellemelerinin bir parçası olarak yayınlansa da, her şeyi otomatik olarak yükseltmez. Burada lakebase_vectoriki şey ayrı yükseltilir ve birbirleriyle ilgisi olmayan sürüm numaraları taşır:

  • Uzantı sürümü, SQL nesnelerinin CREATE EXTENSION lakebase_vector veri türleri, fonksiyonları, operatörleri ve lakebase_ann indeks erişim yöntemi dahil olmak üzere oluşturan versiyonudur. Bu versiyon tarafından bildirilmiştir SELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_vector'. ALTER EXTENSION lakebase_vector UPDATE Bu sürümü güncelliyor.
  • Indeks depolama formatı, bir lakebase_ann indeksin disk üzerindeki düzenidir. Bu uzantı güncellemede güncellenmiş endeks depolama formatları getirerek daha fazla özelliğin kilidini açabilir ve daha iyi performans sağlayabilir. Tüm yeni oluşturulan indeksler otomatik olarak en son depolama formatını kullanırken, mevcut indeksler yeni bir depolama formatı bulunduktan sonra REINDEX INDEX CONCURRENTLY yeni formata yükseltilebilir.

Yükseltme acil değil. Uzantı eski sürümlerdeki SQL nesneleri ve indeks depolama formatlarıyla uyumludur, ancak güncel kalmak sizi desteklenen, en iyi performans veren yolda tutar ve daha sonra daha büyük bir göçü önler; bu yüzden süresiz ertelemek yerine uygun olduğunda güncelleyin.

Note

En son mevcut uzantı sürümü .SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_vector'

En son depolama formatı sürümü ._2 Aşağıdaki sorgu, eski bir depolama formatı kullanan tüm indeksleri bulur. Daha sonra onları en son depolama formatına yeniden inşa edebilirsiniz veya REINDEX INDEXREINDEX INDEX CONCURRENTLY:

SELECT oid::regclass AS index, lakebase_ann_index_info(oid::regclass)::json ->> 'version' AS storage_format_version
FROM pg_class
WHERE relam = (SELECT oid FROM pg_am WHERE amname = 'lakebase_ann') AND relkind = 'i';

Note

REINDEX INDEX CONCURRENTLY okuma ve yazma işlemlerinin devam etmesine izin veriyor ama daha uzun sürüyor.

Hızlı başlangıç

-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));

-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);

-- Create a lakebase_ann index
CREATE INDEX items_embedding_idx ON items
  USING lakebase_ann (embedding vector_l2_ops);

-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

Senkronize tablolardan doldurma

Gömülemeleri doğrudan eklemek yerine Unity Catalog'dan yüklüyorsanız, senkronize tablolar bir göm evi gömülü sütununu senkronizasyon vector sırasında varsayılan eşleme yerine doğrudan Postgres JSONB sütununa eşleyebilir. Lakebase Search için Özel tip eşlemesi bölümüne bakınız.

Dizini yapılandırma

Doğruluk/hız dengesini denetlemek için dizin oluşturma sırasında ayarlayın build_mode :

  • standard (varsayılan): geri çağırma ve endeks üretim süresini dengeler. Çoğu iş yükü için kullanın.
  • quality: geri çağırma hızını artırır ama inşa etmek daha uzun sürer.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');

Geri uyumluluk için fast build modu desteklenmeye devam ediyor.

Varsayılan olarak, lakebase_ann listeleri tablonun istatistiklerine ve indeksin yapılandırmasına göre seçer. Bölüm düzenini açıkça kontrol edecek şekilde ayarlandı lists :

CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');

Endeks yapım süresi

Daha büyük olanlar shared_buffers indeks üretim süresini önemli ölçüde azaltabilir. Lakebase bu optimizasyonu yalnızca daha büyük sabit boyutlu hesaplamalarda mümkün kılar. Endeks yapısını optimize etmeden önce mevcut değeri kontrol edin:

SHOW shared_buffers;

Eğer shared_buffers 1 GB veya daha azsa, endeks derlemesine başlamadan önce geçici olarak daha büyük sabit boyutlu bir hesaplamaya boyut değiştirmeyi düşünün.

Ayrıca paralel çalışan sayısını artırarak endeks oluşturmayı hızlandırabilirsiniz.

Yapılandırma parametresi, max_parallel_maintenance_workers örneğin tek bir yardımcı komutuyla CREATE INDEXbaşlatılabilen maksimum paralel işçi sayısını belirler.

Yapılandırma parametresi, max_parallel_workers paralel işlemler için hesaplamanın destekleyebileceği maksimum çalışan sayısını belirler. Bu sınırın üzerindeki değerler max_parallel_maintenance_workers hiçbir etki yaratmaz.

Yapılandırma parametresi, max_worker_processes hesaplamanın destekleyebileceği maksimum arka plan süreci sayısını belirler. Lakebase, bu ayarı hesaplama boyutuna göre yönetir. Bu sınırın üzerindeki değerler max_parallel_workers hiçbir etki yaratmaz.

SHOW max_worker_processes;
-- Set both values to the desired parallelism minus one.
SET max_parallel_workers = 15;
SET max_parallel_maintenance_workers = 15;

Dizinleri eşzamanlı olarak oluşturma

CREATE INDEX CONCURRENTLY ve REINDEX INDEX CONCURRENTLY bir indeks oluşturulurken veya yeniden inşa edilirken okuma ve yazma işlemlerinin devam etmesine izin verir:

CREATE INDEX CONCURRENTLY items_embedding_idx_concurrent ON items
  USING lakebase_ann (embedding vector_l2_ops);

REINDEX INDEX CONCURRENTLY items_embedding_idx_concurrent;

Arama doğruluğunu ayarlama

Ayarlamadan önce dizinin lakebase_ann_index_info(index_name), listsve default_probes değerlerini almak için öğesini çağırındefault_epsilon.

Sorgu sırasında kaç tüp bebek bölümünün arandığını kontrol etmek için kullanın lakebase_ann.probes . Daha yüksek değerler sorgu hızına göre geri çekmeyi iyileştirir. Varsayılan değer: 'auto'. Geri çağırma hedefinize ulaşmak için farklı değerleri test edin.

Şekli, probes 'nin listsşekliyle eşleşmelidir. Dizinizi lists bulmak için çağrılakebase_ann_index_info, ardından bir seviyeli indeks için bir değer veya iki seviyeli indeks için iki virgülle ayrılmış değer ayarlayın:

lists dizin bilgilerinden probes ayarlamak için
[] (boş) ''
[222] '22'
[3333, 33333] '33, 333'

Note

Küçük bir veri setinde, lakebase_ann IVF bölmesi yerine tam (düz) arama kullanır ve lakebase_ann_index_info boş lists ve default_probesdöner. Bu durumda, probes ayarla bırakın.'' lists Boş olmadığında, probes şekli lists uyumayan bir değer hata oluşturur.

-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_idx');

-- Then set probes to match the shape of lists.
-- One-level index (single-value lists): set one value.
SET lakebase_ann.probes TO '10';

-- Two-level index: set two ascending comma-separated values, for example '10, 20'.
-- Flat index (empty lists): leave probes set to ''.

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;

lakebase_ann.epsilon tam hassasiyet mesafeleriyle kaç adayın yeniden sıralandığını kontrol eder. Daha yüksek değerler daha fazla adayı yeniden sıralama yapar ve daha uzun sürer. varsayılan değeri 'auto' çoğu iş yükü için iyi çalışır. Küçük bir veri setinde düz arama sırasında epsilon hâlâ tam hassasiyetle yeniden sıralama kontrolü yapılıyor.

Ön filtre

Varsayılan olarak, Postgres ANN indeksi aday satırları döndürdükten sonra vektör dışı filtre koşullarını uygular. Tam hassasiyetle mesafe yeniden sıralamasından önce bu koşulları değerlendirmeyi mümkün lakebase_ann.prefilter kılın:

SET lakebase_ann.prefilter TO on;

SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;

Ön filtreleme en iyi şekilde filtrenin ucuz değerlendirilmesi ve çoğu satırı kaldırması durumunda çalışır. Birçok satırla eşleşen veya pahalı hesaplamalar gerektiren filtreler için kapatın, çünkü indeks içindeki filtreyi değerlendirmek ek yük getirebilir.

Bir indeks önceden ısıtılır

lakebase_ann_prewarm Bir hesaplama başladıktan sonra kullanım, bir indeksin sık erişilen kısımlarını belleğe yüklemek için kullanılır. Argüman scope aşağıdaki değerleri kabul eder:

  • search (varsayılan): Arama için kullanılan tam sıcak kısmı önceden ısıtır.
  • routing: Sadece yönlendirme yapılarını önceden ısıtır. Bu seçenek daha hızlıdır ve büyük endeksler için daha iyi bir maliyet-performans dengesi sağlar.
-- Prewarm the full search scope
SELECT lakebase_ann_prewarm('items_embedding_idx');

-- Prewarm only routing structures
SELECT lakebase_ann_prewarm('items_embedding_idx', scope => 'routing');

İşleç sınıfları

Uzaklık ölçümü Operatör sınıfı Sorgu işleci
L2 (Öklid) vector_l2_ops <->
Negatif iç ürün vector_ip_ops <#>
Kosinüs benzerliği vector_cosine_ops <=>

Eklemelerinizin eğitilmesiyle eşleşen işleç sınıfını seçin ve dizin ve sorgu için aynı ölçümü kullanın:

  • vector_cosine_ops (<=>) kosinüs benzerliğidir. Çoğu metin ekleme için kullanın. Bu en yaygın seçenektir.
  • vector_l2_ops (<->) Öklid (L2) uzaklığıdır. Mutlak uzamsal mesafe önemli olduğunda ve vektörler normalleştirilmediğinde kullanın.
  • vector_ip_ops (<#>) negatif iç üründür. Vektörler birim uzunluğuna önceden normalleştirildiğinde kullanın. Birim vektörleri için iç ürün kosinüs benzerliğine eşittir ve genellikle daha hızlıdır.

Dizin seçenekleri başvurusu

Seçenek Type Varsayılan Açıklama
build_mode string 'standard' Doğruluk/hız dengesini kontrol eder. Daha uzun bir endeks yapısı pahasına daha iyi geri çağırma için kullanmak 'quality' . 'fast' geriye dönük uyumluluk için desteklenmeye devam ediyor.
lists string 'auto' IVF bölüm düzenini belirler. Ile 'auto', uzantı tablonun istatistiklerine ve indeksin yapılandırmasına dayalı bir değer seçer. Tek bir tam sayı ( '1000' örneğin bir seviyeli indeks) veya iki seviyeli indeks için iki artan virgülle ayrılmış tam sayı '100, 1000' (örneğin iki seviyeli indeks) ayarlayın.

GUC başvurusu

Parametre Type Varsayılan Açıklama
lakebase_ann.probes string 'auto' Her seviyede tarama yapılacak tüp bebek bölümü sayısı. Daha yüksek değerler sorgu hızına göre geri çekmeyi iyileştirir. Şekil, 'den lakebase_ann_index_infoolan diziyle lists eşleşmelidir.
lakebase_ann.epsilon string 'auto' Tam hassasiyet mesafeleriyle kaç adayın yeniden sıralandığını kontrol eder. Daha yüksek değerler daha fazla adayı yeniden sıralama yapar ve daha uzun sürer.
lakebase_ann.prefilter sabit listesi off Tam hassasiyetle mesafe yeniden sıralamasından önce vektör olmayan filtreleri değerlendirir. Geçerli değerler: on ve off. Çoğu aday satırını kaldıran ucuz filtreler için en iyisi.

Yardımcı program işlevleri

Function İadeler Açıklama
lakebase_ann_prewarm(regclass, scope text DEFAULT 'search') boşluk Sık sık erişilen indeks verilerini belleğe yükler. Geçerli scope değerler search ve routing.
lakebase_ann_index_info(regclass) Başka bir metin sağlanmadığı için, verilen metne dayalı bir çeviri yapmam mümkün değil. Lütfen çevirilecek metni belirtin. Indeks meta verilerini JSON metni olarak döndürür, bunlar arasında version, lists, default_probes, ve default_epsilon.

Sonraki Adımlar