Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Important
Ez a funkció bétaverzióban érhető el. A munkaterület rendszergazdái az Előnézetek lapon szabályozhatják a funkcióhoz való hozzáférést. Lásd: Az Azure Databricks előzetes verziójának kezelése.
A lakebase_vector bővítmény a legközelebbi szomszéd (ANN) vektorkeresést adja hozzá a Lakebase-hez az lakebase_ann indextípuson keresztül. A pgvector egy drop-in társa: ugyanazok a vektortípusok, távolság operátorok és lekérdezési szintaxis módosítás nélkül működnek.
Install
Először engedélyezze a Lakebase Search szolgáltatást a projektbeállítások között. Ezután telepítse a bővítményt:
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
A CASCADE kulcsszó automatikusan függőségként telepedik pgvector .
Gyors kezdés
-- 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 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;
Töltsd fel szinkronizált táblákból
Ha a Unity Catalog-ból töltöd be a beágyazásokat, nem közvetlenül beillesztenéd, a szinkronizált táblák képesek egy tóházi beágyazási oszlopot közvetlenül egy Postgres vector oszlopra leképezni szinkron közben, nem pedig az alapértelmezett JSONB leképezéssel. Lásd : Custom type mapping for Lakebase Search.
Az index konfigurálása
Az index létrehozásakor állítsa be build_mode a pontosság/sebesség közötti kompromisszumot:
-
standard(alapértelmezett): kiegyenlíti a visszahívást és az index építési időt. A legtöbb számítási feladathoz használható. -
quality: javítja a visszahívást, de tovább tart az építés.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');
A fast build mód továbbra is támogatott a visszafelé kompatibilitás miatt.
Alapértelmezés lakebase_ann szerint a listákat a táblázat statisztikái és az index konfigurációja alapján választja. Állítsuk lists be a partíció elrendezésének explicit vezérlésére:
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');
Index építési idő
A nagyobb shared_buffers jelentősen csökkentheti az index építési időt. A Lakebase ezt az optimalizálást csak nagyobb, fix méretű számításgépeken teszi lehetővé. Ellenőrizd az aktuális értéket, mielőtt optimalizálnánk egy indexépítést:
SHOW shared_buffers;
Ha shared_buffers 1 GB vagy annál kevesebb, fontold meg ideiglenesen egy nagyobb, fix méretű számításra való átméretezést az index építés elindítása előtt.
Az indexkészítést is felgyorsíthatod azzal, hogy növeled a párhuzamos dolgozók számát.
A max_parallel_maintenance_workers konfigurációs paraméter határozza meg a maximális párhuzamos munkások számát, amelyeket egyetlen segédparancs, például CREATE INDEX.
A max_parallel_workers konfigurációs paraméter határozza meg a maximális munkások számát, amelyeket a számítás párhuzamos műveletekhez támogathat. A határ feletti értékek max_parallel_maintenance_workers nem hatnak.
A max_worker_processes konfigurációs paraméter határozza meg a számítás által támogatott maximális háttérfolyamatok számát. A Lakebase ezt a beállítást a számítási méret alapján kezeli. A határ feletti értékek max_parallel_workers nem hatnak.
SHOW max_worker_processes;
-- Set both values to the desired parallelism minus one.
SET max_parallel_workers = 15;
SET max_parallel_maintenance_workers = 15;
Indexek egyidejű létrehozása
A CREATE INDEX CONCURRENTLY táblázat zárolása nélküli buildelésre, majd REINDEX CONCURRENTLY állásidő nélküli újraépítésre használható:
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_ann;
Keresési pontosság finomhangolása
A hangolás előtt hívja meg lakebase_ann_index_info(index_name) az index és listsdefault_probes az értékek lekérésétdefault_epsilon.
Használd lakebase_ann.probes lekérdezéskor annak ellenőrzésére, hány IVF partíciót keresnek át. A magasabb értékek a lekérdezési sebesség költségén javítják a visszahívást. Az alapértelmezett érték a 'auto'. Tesztelj különböző értékeket, hogy elérd a visszahívási célodat.
A formájának probes meg kell egyeznie a . listsalakjával. Hívd lakebase_ann_index_info meg a lists tömböd, majd állíts be egy értéket egy egyszintű indexhez vagy két vesszővel elválasztott értéket egy kétszintű indexhez:
lists indexadatokból |
probes beállításhoz |
|---|---|
[] (üres) |
'' |
[222] |
'22' |
[3333, 33333] |
'33, 333' |
Note
Egy kis adathalmazon lakebase_ann pontos (lapos) keresést alkalmaz az IVF partíció helyett, és lakebase_ann_index_info üres lists és default_probes. Ebben az esetben hagyjuk probes a beállítást .'' Amikor lists nem üres, akkor egy probes olyan érték, amelynek alakja nem egyezik lists , hibát okoz.
-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_ann');
-- 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 szabályozza, hány jelöltet sorolnak újra teljes pontosságú távolságokkal. A magasabb értékek több jelöltet sorolnak újra, és tovább tart. Az alapértelmezett érték 'auto' a legtöbb számítási feladat esetében jól működik. Kis adathalmazon végzett lapos keresés közben epsilon továbbra is teljes pontosságú újrarangsorolást irányít.
Előszűrő
Alapértelmezés szerint a Postgres nem-vektorszűrő feltételeket alkalmaz, miután az ANN index jelölt sorokat ad vissza. Lehetővé tegyék lakebase_ann.prefilter ezeknek a feltételeknek a teljes pontosságú távolságátsorolás előtti értékelését:
SET lakebase_ann.prefilter TO on;
SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;
Az előszűrés akkor működik a legjobban, ha a szűrő olcsó az értékelés, és a legtöbb sort eltávolítja. Hagyd ki azokat a szűrőket, amelyek sok sorhoz hasonlóak, vagy drága számításokat igényelnek, mert a szűrő indexen belüli értékelése növelheti a költségeket.
Operátorosztályok
| Távolság metrika | Operátorosztály | Lekérdezési operátor |
|---|---|---|
| L2 (Euklideszi) | vector_l2_ops |
<-> |
| Negatív belső termék | vector_ip_ops |
<#> |
| Koszinusz hasonlóság | vector_cosine_ops |
<=> |
Válassza ki azt az operátorosztályt, amely megfelel a beágyazások betanításának, és használja ugyanazt a metrikát az indexhez és a lekérdezéshez:
-
vector_cosine_ops(<=>) koszinusz hasonlóság. Használja a legtöbb szöveges beágyazáshoz. Ez a leggyakoribb választás. -
vector_l2_ops(<->) euklideszi (L2) távolság. Akkor használja, ha az abszolút térbeli távolság számít, és a vektorok nem normalizálódnak. -
vector_ip_ops(<#>) negatív belső termék. Akkor használja, ha a vektorok előre normalizálva vannak az egységhosszra. Egységvektorok esetében a belső termék koszinusz hasonlóságú, és általában gyorsabb.
Indexbeállítások hivatkozása
| Option | Típus | Default | Description |
|---|---|---|---|
build_mode |
karakterlánc | 'standard' |
Szabályozza a pontosság/sebesség kompromisszumot. Jobb visszahívás érdekében 'quality' használod, de hosszabb indexépítés árán.
'fast' továbbra is támogatott a visszafelé kompatibilitás. |
lists |
karakterlánc | 'auto' |
Beállítása az IVF partíció elrendezését. A 'auto'kiterjesztés a tábla statisztikái és az index konfigurációja alapján választ egy értéket. Állíts be egyetlen egész számot, például '1000' egy egyszintű indexhez, vagy két emelkedő, vesszővel elválasztott egész számot, például '100, 1000' egy kétszintű indexhez. |
GUC-referencia
| Paraméter | Típus | Default | Description |
|---|---|---|---|
lakebase_ann.probes |
karakterlánc | 'auto' |
Minden szinten hány IVF partíciót kell átvizsgálni. A magasabb értékek a lekérdezési sebesség költségén javítják a visszahívást. Az alakzatnak egyeznie kell a lists tömbbe .lakebase_ann_index_info |
lakebase_ann.epsilon |
karakterlánc | 'auto' |
Szabályozza, hány jelöltet sorolnak át teljes pontosságú távolságokkal. A magasabb értékek több jelöltet sorolnak újra, és tovább tart. |
lakebase_ann.prefilter |
felsorolás | off |
Értékeli a nem-vektorszűrőket a teljes pontosságú távolság újrarangolása előtt. Az érvényes értékek a következők: on és off. A legjobb olcsó szűrők, amelyek eltávolítják a legtöbb jelölt sort. |
Hasznossági funkciók
| Function | Returns | Description |
|---|---|---|
lakebase_ann_prewarm(regclass) |
érvénytelen | Betölt egy indexet a memóriába az első lekérdezés hidegindítási késésének kiküszöbölése érdekében. |
lakebase_ann_index_info(regclass) |
SMS | Az index metaadatait adja vissza szövegként, beleértve a lists. default_probesdefault_epsilon |