Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De lakebase_vector extensie voegt bij benadering dichtstbijzijnde neighbor vectorzoekopdrachten (ANN) toe aan Lakebase via het lakebase_ann indextype. Het is een vervolgkeuzeassistent voor pgvector: dezelfde vectortypen, afstandsoperators en querysyntaxis werken zonder wijziging.
Install
Schakel eerst Lakebase Search in uw projectinstellingen in. Installeer vervolgens de extensie:
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
Het CASCADE trefwoord wordt pgvector automatisch geïnstalleerd als een afhankelijkheid.
Upgrade de extensie en indexen
Een nieuwe Lakebase Search-release kan functies, fixes en prestatieverbeteringen toevoegen. Hoewel Lakebase Search wordt uitgebracht als onderdeel van Lakebase-updates, wordt niet alles automatisch bijgewerkt. In lakebase_vector, upgraden twee dingen afzonderlijk en dragen versienummers die niet aan elkaar gerelateerd zijn:
-
De extensieversie is de versie van de SQL-objecten die
CREATE EXTENSION lakebase_vectoraanmaakt, inclusief de datatypes, functies, operatoren en delakebase_annindextoegangsmethode. Deze versie wordt gerapporteerd doorSELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_vector'.ALTER EXTENSION lakebase_vector UPDATEUpdates van deze versie. -
Het indexopslagformaat is de op-schijf indeling van een
lakebase_annindex. De uitbreiding kan in een update bijgewerkte indexopslagformaten introduceren, waardoor meer functies worden ontgrendeld en betere prestaties worden geleverd. Alle nieuw aangemaakte indexen gebruiken automatisch het nieuwste opslagformaat, terwijl bestaande indexen kunnen worden geüpgraded naar het nieuwe formaat nadatREINDEX INDEX CONCURRENTLYeen nieuwer opslagformaat beschikbaar is.
Upgraden is niet dringend. De extensie is compatibel met SQL-objecten en indexopslagformaten van oudere versies, maar het up-to-date blijven houd je op het ondersteunde, best presterende pad en voorkomt een grotere migratie later, dus upgrade wanneer het uitkomt in plaats van het eindeloos uit te stellen.
Note
De laatst beschikbare extensieversie wordt gerapporteerd door SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_vector'.
De nieuwste opslagformatversie is _2. De volgende zoekopdracht vindt alle indexen die een ouder opslagformaat gebruiken. Je kunt ze vervolgens opnieuw opbouwen naar het nieuwste opslagformaat met REINDEX INDEX of 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 Maakt het mogelijk om lezen en schrijven te laten doorgaan, maar het duurt langer.
Snel starten
-- 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;
Vul uit gesynchroniseerde tabellen
Als je embeddings uit Unity Catalog laadt in plaats van ze direct in te voegen, kunnen gesynchroniseerde tabellen een lakehouse-embeddingkolom direct naar een Postgres-kolom vector mappen tijdens de synchronisatie, in plaats van de standaardmapping JSONB . Zie Aangepaste type-mapping voor Lakebase Search.
De index configureren
Ingesteld build_mode bij het maken van een index om de nauwkeurigheid/snelheid te bepalen:
-
standard(standaard): Saldo's recall en indexbouwtijd. Gebruik voor de meeste workloads. -
quality: verbetert het geheugen, maar het duurt langer om op te bouwen.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');
De fast bouwmodus blijft ondersteund voor achterwaartse compatibiliteit.
Standaard kiest lakebase_ann hij lijsten op basis van de statistieken van de tabel en de configuratie van de index. Ingesteld lists om expliciet de partitie-indeling te besturen:
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');
Indexbouwtijd
Groter shared_buffers kan de bouwtijd van de index aanzienlijk verkorten. Lakebase maakt deze optimalisatie alleen mogelijk op grotere berekeningen met vaste grootte. Controleer de huidige waarde voordat je een indexbuild optimaliseert:
SHOW shared_buffers;
Als shared_buffers het 1 GB of minder is, overweeg dan tijdelijk te veranderen naar een grotere compute met vaste grootte voordat je met de indexbouw begint.
Je kunt ook het aanmaken van indexen versnellen door het aantal parallelle werkers te verhogen.
De max_parallel_maintenance_workers configuratieparameter stelt het maximale aantal parallelle werkers vast dat kan worden gestart met een enkel nutscommando zoals CREATE INDEX.
De max_parallel_workers configuratieparameter stelt het maximale aantal werkers vast dat de berekening kan ondersteunen voor parallelle bewerkingen. Waarden boven max_parallel_maintenance_workers deze limiet hebben geen effect.
De max_worker_processes configuratieparameter stelt het maximale aantal achtergrondprocessen vast dat de computer kan ondersteunen. Lakebase beheert deze instelling op basis van rekengrootte. Waarden boven max_parallel_workers deze limiet hebben geen effect.
SHOW max_worker_processes;
-- Set both values to the desired parallelism minus one.
SET max_parallel_workers = 15;
SET max_parallel_maintenance_workers = 15;
Indexen gelijktijdig bouwen
CREATE INDEX CONCURRENTLY en REINDEX INDEX CONCURRENTLY laten lezen en schrijven doorgaan terwijl een index wordt gebouwd of herbouwd:
CREATE INDEX CONCURRENTLY items_embedding_idx_concurrent ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_idx_concurrent;
Nauwkeurigheid van zoekopdrachten afstemmen
Voordat u gaat afstemmen, roept lakebase_ann_index_info(index_name) u aan om de indexen listsen default_probesdefault_epsilon waarden op te halen.
Gebruik lakebase_ann.probes tijdens het querymoment om te bepalen hoeveel IVF-partities er worden doorzocht. Hogere waarden verbeteren het intrekken tegen de kosten van querysnelheid. De standaardwaarde is 'auto'. Test verschillende waarden om je terugroepdoel te halen.
De vorm van probes moet overeenkomen met de vorm van lists. Roep lakebase_ann_index_info aan om je lists array te vinden, stel dan één waarde in voor een één-niveau index of twee komma-gescheiden waarden voor een twee-niveau index:
lists uit indexgegevens |
probes instellen |
|---|---|
[] (leeg) |
'' |
[222] |
'22' |
[3333, 33333] |
'33, 333' |
Note
Op een kleine dataset lakebase_ann gebruikt exact (vlak) zoeken in plaats van IVF-partitionering, en lakebase_ann_index_info geeft leeg lists en default_probes. In dit geval laat probes je het op zetten ''. Wanneer lists niet leeg is, veroorzaakt een probes waarde waarvan de vorm niet overeenkomt lists een fout.
-- 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 bepaalt hoeveel kandidaten worden herrangschikt met behulp van afstanden met volledige precisie. Hogere waarden herschikken meer kandidaten en het duurt langer. De standaardwaarde werkt 'auto' goed voor de meeste workloads. Tijdens flat search op een kleine dataset controleert epsilon nog steeds volledige precisie herrangschikking.
Prefilter
Standaard past Postgres niet-vectorfiltervoorwaarden toe nadat de ANN-index kandidaatrijen heeft teruggegeven. Stel in staat lakebase_ann.prefilter deze omstandigheden te evalueren voordat volledige precisie afstand wordt herrangschikt:
SET lakebase_ann.prefilter TO on;
SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;
Prefiltering werkt het beste wanneer het filter goedkoop te evalueren is en de meeste rijen verwijdert. Laat het uit voor filters die veel rijen overeenkomen of dure berekeningen vereisen, omdat het evalueren van het filter binnen de index extra overhead kan toevoegen.
Voorwarmen van een index
Gebruik lakebase_ann_prewarm nadat een berekening is begonnen om de vaak gebruikte delen van een index in het geheugen te laden. Het scope argument accepteert de volgende waarden:
-
search(standaard): Warmt het volledige hete gedeelte voor voor zoekdoeleinden voor. -
routing: Voorwarmt alleen de routeringsstructuren. Deze optie is sneller en biedt een betere kosten-prestatie afweging voor grote indexen.
-- 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');
Operatorklassen
| Metrische gegevens voor afstand | Operatorklasse | Queryoperator |
|---|---|---|
| L2 (Euclidisch) | vector_l2_ops |
<-> |
| Negatief binnenproduct | vector_ip_ops |
<#> |
| Cosinus-gelijkenis | vector_cosine_ops |
<=> |
Kies de operatorklasse die overeenkomt met de wijze waarop uw insluitingen zijn getraind en gebruik dezelfde metrische gegevens voor de index en de query:
-
vector_cosine_ops(<=>) is cosinus-gelijkenis. Gebruik deze voor de meeste tekst insluitingen. Dit is de meest voorkomende keuze. -
vector_l2_ops(<->) is Euclidean (L2) afstand. Gebruik deze functie wanneer absolute ruimtelijke afstand belangrijk is en vectoren niet worden genormaliseerd. -
vector_ip_ops(<#>) is een negatief binnenproduct. Gebruik deze als vectoren vooraf zijn genormaliseerd tot eenheidslengte. Voor eenheidsvectoren is het binnenste product gelijk aan cosinus-gelijkenis en is dit doorgaans sneller.
Naslaginformatie over indexopties
| Option | Typ | Default | Description |
|---|---|---|---|
build_mode |
touw | 'standard' |
Bepaalt de afweging tussen nauwkeurigheid en snelheid. Gebruik 'quality' het voor een betere recall ten koste van een langere indexbuild.
'fast' blijft ondersteund voor achterwaartse compatibiliteit. |
lists |
touw | 'auto' |
Stelt de IVF-partitie-indeling in. Met 'auto', kiest de extensie een waarde op basis van de statistieken van de tabel en de configuratie van de index. Stel een enkel geheel getal in, bijvoorbeeld '1000' voor een index met één niveau, of twee oplopende gehele getallen met oplopende komma, zoals '100, 1000' bij een index met twee niveaus. |
GUC-verwijzing
| Parameter | Typ | Default | Description |
|---|---|---|---|
lakebase_ann.probes |
touw | 'auto' |
Aantal IVF-partities om op elk niveau te scannen. Hogere waarden verbeteren het intrekken tegen de kosten van querysnelheid. De vorm moet overeenkomen met de lists array van lakebase_ann_index_info. |
lakebase_ann.epsilon |
touw | 'auto' |
Bepaalt hoeveel kandidaten worden herrangschikt met behulp van volledige precisie afstanden. Hogere waarden herschikken meer kandidaten en het duurt langer. |
lakebase_ann.prefilter |
enum | off |
Evalueert niet-vectorfilters voordat de afstand met volledige precisie wordt herrangschikt. Geldige waarden zijn on en off. Het beste voor goedkope filters die de meeste kandidaatrijen verwijderen. |
Hulpprogrammafuncties
| Function | Returns | Description |
|---|---|---|
lakebase_ann_prewarm(regclass, scope text DEFAULT 'search') |
leegte | Laadt vaak geraadpleegde indexgegevens in het geheugen. Geldige scope waarden zijn search en routing. |
lakebase_ann_index_info(regclass) |
text | Geeft indexmetadata terug als JSON-tekst, inclusief version, lists, , default_probesen default_epsilon. |