lakebase_vector

Tillägget lakebase_vector lägger till ungefärlig vektorsökning med närmaste granne (ANN) till Lakebase via lakebase_ann indextypen. Det är en drop-in-koppling till pgvector: samma vektortyper, avståndsoperatorer och frågesyntax fungerar utan ändringar.

Install

Aktivera Först Lakebase Search i dina projektinställningar. Installera sedan tillägget:

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

Nyckelordet CASCADE installeras pgvector automatiskt som ett beroende.

Uppgradera tillägget och indexen

En ny Lakebase Search-version kan lägga till funktioner, fixar och prestandaförbättringar. Även om Lakebase Search släpps som en del av Lakebase-uppdateringarna, uppgraderar det inte allt automatiskt. I lakebase_vector, uppgraderas två saker separat och bär versionsnummer som inte är relaterade till varandra:

  • Tilläggsversionen är den version av SQL-objekten som CREATE EXTENSION lakebase_vector skapar, inklusive dess datatyper, funktioner, operatorer och lakebase_ann indexåtkomstmetoden. Denna version rapporteras av SELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_vector'. ALTER EXTENSION lakebase_vector UPDATE uppdaterar denna version.
  • Indexlagringsformatet är den diskbaserade layouten av ett lakebase_ann index. Tillägget kan introducera uppdaterade indexlagringsformat i en uppdatering, låsa upp fler funktioner och leverera bättre prestanda. Alla nyskapade index använder automatiskt det senaste lagringsformatet, medan befintliga index kan uppgraderas till det nya formatet REINDEX INDEX CONCURRENTLY efter att ett nyare lagringsformat blivit tillgängligt.

Uppgradering är inte brådskande. Tillägget är kompatibelt med SQL-objekt och indexlagringsformat från äldre versioner, men att hålla sig uppdaterad håller dig på den stödda, bäst presterande vägen och undviker en större migrering senare, så uppgradera när det är bekvämt istället för att skjuta upp det på obestämd tid.

Note

Den senaste tillgängliga tilläggsversionen rapporteras av SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_vector'.

Den senaste lagringsformatversionen är _2. Följande fråga hittar alla index som använder ett äldre lagringsformat. Du kan sedan bygga om dem till det senaste lagringsformatet med REINDEX INDEX eller REINDEX 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 Tillåter läsning och skrivning att fortsätta, men det tar längre tid.

Snabbstart

-- 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;

Befolka från synkade tabeller

Om du laddar in embeddings från Unity Catalog istället för att infoga dem direkt, kan synkade tabeller mappa en lakehouse-embeddingkolumn direkt till en Postgres-kolumn vector under synkroniseringen, istället för standardmappningen JSONB . Se Anpassad typmappning för Lakebase Search.

Konfigurera indexet

Ange build_mode vid skapande av index för att kontrollera noggrannhet/hastighetsavvägning:

  • standard (standard): Saldon återkallas och indexbyggtid. Används för de flesta arbetsbelastningar.
  • quality: förbättrar inkallningen men tar längre tid att bygga.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');

Byggläget fast stöds fortfarande för bakåtkompatibilitet.

Som standard lakebase_ann väljer listor baserat på tabellens statistik och indexets konfiguration. Inställd lists på att explicit styra partitionslayouten:

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

Indexbyggtid

Större shared_buffers kan avsevärt minska byggtiden för index. Lakebase möjliggör denna optimering endast på större beräkningar med fast storlek. Kontrollera det aktuella värdet innan du optimerar ett indexbygge:

SHOW shared_buffers;

Om shared_buffers det är 1 GB eller mindre, överväg att tillfälligt ändra storleken till en större fast storlek innan du påbörjar indexbygget.

Du kan också snabba upp indexskapandet genom att öka antalet parallella arbetare.

Konfigurationsparametern max_parallel_maintenance_workers anger det maximala antalet parallella arbetare som kan startas med ett enda nyttokommando såsom CREATE INDEX.

Konfigurationsparametern max_parallel_workers anger det maximala antalet arbetare som beräkningen kan stödja för parallella operationer. Värden över max_parallel_maintenance_workers denna gräns har ingen effekt.

Konfigurationsparametern max_worker_processes sätter det maximala antalet bakgrundsprocesser som beräkningen kan stödja. Lakebase hanterar denna inställning baserat på beräkningsstorlek. Värden över max_parallel_workers denna gräns har ingen effekt.

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

Skapa index samtidigt

CREATE INDEX CONCURRENTLY och REINDEX INDEX CONCURRENTLY tillåter läsningar och skrivningar att fortsätta medan ett index byggs eller byggs om:

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

REINDEX INDEX CONCURRENTLY items_embedding_idx_concurrent;

Justera söknoggrannhet

Innan du justerar anropar du lakebase_ann_index_info(index_name) för att hämta indexets lists, default_probesoch default_epsilon -värden.

Använd lakebase_ann.probes vid frågetillfälle för att kontrollera hur många IVF-partitioner som söks. Högre värden förbättrar återkallandet på bekostnad av frågehastigheten. Standardvärdet är 'auto'. Testa olika värden för att nå ditt återkallningsmål.

Formen av probes måste matcha formen av lists. Anropa lakebase_ann_index_info för att hitta din lists array, och sätt sedan ett värde för ett ennivåindex eller två kommaseparerade värden för ett tvånivåindex:

lists från indexinformation probes för att ställa in
[] (tom) ''
[222] '22'
[3333, 33333] '33, 333'

Note

På en liten datamängd lakebase_ann används exakt (platt) sökning istället för IVF-partitionering, och lakebase_ann_index_info returnerar tomma lists och default_probes. I detta fall, låt probes sätta till ''. När lists inte är tomt orsakar ett probes värde vars form inte matchar lists ett fel.

-- 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 styr hur många kandidater som omrankas med hjälp av avstånd med full precision. Högre värden omrankar fler kandidater och tar längre tid. Standardvärdet 'auto' för fungerar bra för de flesta arbetsbelastningar. Vid platt sökning på en liten datamängd kontrolleras epsilon fortfarande full precisionsomplacering.

Förfilter

Som standard tillämpar Postgres icke-vektorfiltervillkor efter att ANN-indexet returnerat kandidatrader. Gör det möjligt lakebase_ann.prefilter att utvärdera dessa förhållanden innan full precisionsdistansomklassificering:

SET lakebase_ann.prefilter TO on;

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

Förfiltrering fungerar bäst när filtret är billigt att utvärdera och tar bort de flesta rader. Lämna det avstängt för filter som matchar många rader eller kräver dyra beräkningar, eftersom utvärdering av filtret i indexet kan lägga till överhead.

Förvärm ett index

Använd lakebase_ann_prewarm efter att en beräkning börjat ladda de ofta använda delarna av ett index i minnet. Argumentet scope accepterar följande värden:

  • search (standard): Förvärmer hela den varma delen som används för sökning.
  • routing: Förvärmer endast ruttstrukturerna. Detta alternativ är snabbare och ger en bättre kostnads- och prestandaavvägning för stora index.
-- 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');

Operatorklasser

Avståndsmått Operatorklass Frågeoperator
L2 (Euklidiska) vector_l2_ops <->
Negativ inre produkt vector_ip_ops <#>
Cosinuslikhet vector_cosine_ops <=>

Välj den operatorklass som matchar hur dina inbäddningar tränades och använd samma mått för indexet och frågan:

  • vector_cosine_ops (<=>) är cosinélikhet. Använd den för de flesta textbäddningar. Det här är det vanligaste valet.
  • vector_l2_ops (<->) är avståndet euklidiska (L2). Använd den när absolut rumsligt avstånd spelar roll och vektorer inte normaliseras.
  • vector_ip_ops (<#>) är negativ inre produkt. Använd den när vektorer förnormaliseras till enhetslängd. För enhetsvektorer är den inre produkten lika med cosinélikhet och är vanligtvis snabbare.

Referens för indexalternativ

Option Type Förinställning Description
build_mode string 'standard' Styr avvägningen mellan precision och hastighet. Använd 'quality' för bättre återkallning på bekostnad av en längre indexbyggnad. 'fast' stöds fortfarande för bakåtkompatibilitet.
lists string 'auto' Sätter IVF-partitionslayouten. Med 'auto', väljer tillägget ett värde baserat på tabellens statistik och indexets konfiguration. Sätt ett enda heltal, till exempel '1000' för ett ennivåindex, eller två stigande, kommaseparerade heltal, som '100, 1000' för ett tvånivåindex.

GUC-referens

Parameter Type Förinställning Description
lakebase_ann.probes string 'auto' Antal IVF-partitioner att skanna på varje nivå. Högre värden förbättrar återkallandet på bekostnad av frågehastigheten. Formen måste matcha arrayen lists från lakebase_ann_index_info.
lakebase_ann.epsilon string 'auto' Styr hur många kandidater som omrankas med hjälp av avstånd med full precision. Högre värden omrankar fler kandidater och tar längre tid.
lakebase_ann.prefilter uppräkning off Utvärderar icke-vektorfilter innan fullständig precisionsomplacering av avstånd. Giltiga värden är on och off. Bäst för billiga filter som tar bort de flesta kandidatrader.

Hjälpfunktioner

Function Returns Description
lakebase_ann_prewarm(regclass, scope text DEFAULT 'search') ogiltig Laddar in ofta åtkomst indexdata i minnet. Giltiga scope värden är search och routing.
lakebase_ann_index_info(regclass) text Returnerar indexmetadata som JSON-text, inklusive version, lists, , default_probesoch default_epsilon.

Nästa steg