Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Dieses Feature befindet sich in der Betaversion. Arbeitsbereichsadministratoren können den Zugriff auf dieses Feature über die Vorschauseite steuern. Siehe Manage Azure Databricks Previews.
Die lakebase_vector Erweiterung fügt über den lakebase_ann Indextyp eine ungefähre Ann-Vektorsuche zu Lakebase hinzu. Es ist ein Drop-In-Begleiter für pgvector: Die gleichen Vektortypen, Entfernungsoperatoren und Abfragesyntax funktionieren ohne Änderung.
Install
Aktivieren Sie zunächst die Lakebase-Suche in Ihren Projekteinstellungen. Installieren Sie dann die Erweiterung:
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
Das CASCADE Schlüsselwort wird automatisch als Abhängigkeit installiert pgvector .
Schnellstart
-- 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;
Konfigurieren des Index
Legen Sie build_mode bei der Indexerstellung fest, um den Genauigkeits-/Geschwindigkeitskonflikt zu steuern:
-
standard(Standard): optimiert den Rückruf. Wird für die meisten Workloads verwendet. -
fast: baut schneller beim niedrigeren Rückruf auf. Verwenden Sie diese Funktion, wenn die Erstellungszeit wichtiger ist als die Suchqualität.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops) WITH (build_mode = 'fast');
Erstellen von Indizes gleichzeitig
Wird CREATE INDEX CONCURRENTLY verwendet, um ohne die Tabelle zu sperren, und dann REINDEX CONCURRENTLY ohne Ausfallzeiten neu zu erstellen:
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_ann;
Optimieren der Suchgenauigkeit
Rufen Sie lakebase_ann_index_info(index_name) vor der Optimierung auf, um die Werte und lists Werte des Indexes default_probesdefault_epsilonabzurufen.
Legen Sie lakebase_ann.probes zur Abfragezeit fest, um den Genauigkeits-/Geschwindigkeitskonflikt zu steuern. Höhere Werte verbessern den Rückruf, aber langsame Abfragen.
Rufen Sie lakebase_ann_index_info vor der Einstellung lakebase_ann.probesauf, um Ihr lists Array zu finden. Legen Sie einen Probewert pro Listeneintrag fest:
lists aus Indexinformationen |
probes so legen Sie fest |
|---|---|
[] (leer) |
|
[222] |
'22' |
[3333, 33333] |
'33, 333' |
Note
Der lakebase_ann.probes Parameter erfordert einen Wert pro Eintrag in lists. Wenn das lists Array leer ist (was auf kleinen Tabellen geschieht, in denen der Index-Generator keine IVF-Partitionen erstellt), legen Sie nicht fest probes. Das Festlegen eines Werts, wenn das lists Array leer ist, führt zu einem Fehler. IVF-Partitionen werden angezeigt, sobald Ihr Dataset groß genug ist, damit der Index-Generator sie partitioniert.
-- Check your index's lists length first
SELECT lakebase_ann_index_info('items_embedding_ann');
-- Set probes matching the lists array (example: one partition)
SET lakebase_ann.probes TO '22';
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;
lakebase_ann.epsilon steuert den erneuten Rangfolgerrand. Der Standardwert eignet 1.9 sich gut für die meisten Workloads.
SET lakebase_ann.epsilon TO '1.5';
Operatorklassen
| Abstandsmetrik | Operatorklasse | Abfrageoperator |
|---|---|---|
| L2 (Euklidan) | vector_l2_ops |
<-> |
| Negatives inneres Produkt | vector_ip_ops |
<#> |
| Kosinus-Ähnlichkeit | vector_cosine_ops |
<=> |
Wählen Sie die Operatorklasse aus, die der Schulung Ihrer Einbettungen entspricht, und verwenden Sie die gleiche Metrik für den Index und die Abfrage:
-
vector_cosine_ops(<=>) ist kosinusgleichheit. Verwenden Sie sie für die meisten Texteinbettungen. Dies ist die häufigste Wahl. -
vector_l2_ops(<->) der Abstand zwischen Euklidan (L2) ist. Verwenden Sie sie, wenn absolute räumliche Entfernung wichtig ist und Vektoren nicht normalisiert sind. -
vector_ip_ops(<#>) ist ein negatives inneres Produkt. Verwenden Sie sie, wenn Vektoren für die Länge der Einheit vornormiert sind. Bei Einheitsvektoren entspricht das innere Produkt der Kosinusgleichheit und ist in der Regel schneller.
Referenz zu Indexoptionen
| Auswahl | Typ | Standard | Description |
|---|---|---|---|
build_mode |
string | 'standard' |
Steuert den Genauigkeits-/Geschwindigkeitskonflikt zur Indexbuildzeit.
'standard' optimiert den Rückruf; 'fast' erstellt schneller mit niedrigeren Rückrufen. |
GUC-Referenz
| Parameter | Typ | Standard | Description |
|---|---|---|---|
lakebase_ann.probes |
Ganzzahl[] | (nicht festgelegt) | Array pro Partitionssondenanzahl, ein Wert pro Eintrag in lists. Höhere Werte verbessern den Rückruf zu den Kosten der Abfragegeschwindigkeit. Überprüfen Sie lakebase_ann_index_info die lists Länge, um zu bestimmen, wie viele Werte festgelegt werden sollen. |
lakebase_ann.epsilon |
float | 1.9 |
Re-Ranking Margin. Gültiger Bereich: 0.0 bis 4.0. |
Hilfsprogrammfunktionen
| Function | Rückkehr | Description |
|---|---|---|
lakebase_ann_prewarm(regclass) |
void | Lädt einen Index in den Speicher, um die Latenz beim Kaltstart für die erste Abfrage zu vermeiden. |
lakebase_ann_index_info(regclass) |
text | Gibt Indexmetadaten als Text zurück, einschließlich lists, default_probesund default_epsilon. |