Files
Baradb/docs/de/vector.md
T
dimgigov a5d34c001a
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
docs: add German (DE) documentation + update all docs for Sessions 10-12
New German documentation (docs/de/):
- index.md, quickstart.md, installation.md
- baraql.md, graph.md, vector.md, mcp.md

Updated English documentation:
- changelog.md: all Sessions 10-12 features
- graph.md: SQL GRAPH_TABLE, CREATE GRAPH, all 8 algorithms, Cypher, similarity_nodes, node2vec
- vector.md: hybrid RAG, chunk(), embed_text(), auto-embed, nl_to_sql(), schema_prompt()
- baraql.md: new AI & Cross-Modal Functions section, updated keyword tables
- mcp.md: MCP Server documentation (new file)
- index.md: added German (DE) language link
2026-05-17 16:15:45 +03:00

3.3 KiB

Vektor-Suche

Native HNSW und IVF-PQ Indizes für Ähnlichkeitssuche mit vollständiger SQL-Integration.

SQL — Vektor-Spalten

CREATE TABLE items (
    id INT PRIMARY KEY,
    embedding VECTOR(768)
);

Der VECTOR(n)-Typ speichert float32-Arrays mit fester Dimension n.

Vektoren einfügen

INSERT INTO items (id, embedding) VALUES (1, '[0.1, 0.2, 0.3, ...]');

Vektor-Distanzfunktionen

-- Kosinus-Distanz (0 = identisch, 1 = orthogonal)
SELECT id, cosine_distance(embedding, '[0.1, 0.2, 0.3]') AS dist FROM items;

-- Euklidische / L2 Distanz
SELECT id, euclidean_distance(embedding, '[0.1, 0.2, 0.3]') AS dist FROM items;
SELECT id, embedding <-> '[0.1, 0.2, 0.3]' AS dist FROM items;

-- Inneres Produkt (negativ für Minimierung)
SELECT id, inner_product(embedding, '[0.1, 0.2, 0.3]') AS dist FROM items;

-- Manhattan / L1 Distanz
SELECT id, l1_distance(embedding, '[0.1, 0.2, 0.3]') AS dist FROM items;

Vektor-Indizes

-- HNSW-Index für approximative Nächste-Nachbarn-Suche
CREATE INDEX idx_items_vec ON items(embedding) USING hnsw;

-- Der Index wird bei INSERT und UPDATE automatisch aktualisiert
-- Kombinierte Vektor- + Volltext-Suche mit RRF-Reranking
SELECT hybrid_search('AI query', embedding, content, 10) AS result;

-- Gefilterte hybride Suche
SELECT hybrid_search_filtered('AI query', embedding, content, 10, 'category', 'news') AS result;

AI Pipeline

Text-Chunking

-- Text in überlappende Chunks zerlegen
SELECT chunk('Langer Text hier...', 1024, 128) AS result;

-- Ergebnis: [{"index":0, "text":"...", "size":124}, ...]

Embedding-Generierung

-- Externen Embedding-Service aufrufen (konfiguriert via Umgebungsvariablen)
SELECT embed_text('Suchtext hier') AS result;

Umgebungsvariablen für den Embedder:

export BARADB_EMBED_ENDPOINT=http://localhost:11434/api/embeddings
export BARADB_EMBED_MODEL=nomic-embed-text

Auto-Embedding bei INSERT

Wenn eine VECTOR-Spalte NULL ist, aber eine TEXT-Spalte einen Wert hat, wird das Embedding automatisch generiert (falls ein Embedder konfiguriert ist).

CREATE TABLE docs (id INTEGER PRIMARY KEY, content TEXT, embedding VECTOR(768));
CREATE INDEX docs_vec ON docs(embedding) USING hnsw;

-- embedding wird automatisch gefüllt
INSERT INTO docs (id, content) VALUES (1, 'Dieser Text wird automatisch embedded');

Distanzmetriken

Metrik SQL-Funktion Beschreibung
cosine cosine_distance(a, b) Kosinus-Distanz
euclidean euclidean_distance(a, b) / <-> L2-Distanz
dotproduct inner_product(a, b) Negatives Skalarprodukt
manhattan l1_distance(a, b) L1-Distanz

Index-Typen

HNSW (Standard)

import barabadb/vector/engine
var hnsw = newHNSWIndex(dimensions = 128, m = 16, efConstruction = 200)

IVF-PQ

var ivfpq = newIVFPQIndex(dimensions = 128, numCentroids = 256, subQuantizers = 8)

Native Nim API

import barabadb/vector/engine

var idx = newHNSWIndex(dimensions = 128)
idx.insert(1, @[1.0'f32, 0.0'f32, ...], {"category": "A"}.toTable)

let results = idx.search(queryVector, k = 10)
let filtered = idx.searchWithFilter(queryVector, k = 10,
  filter = proc(meta: Table[string, string]): bool = return "category" in meta)