Hoppa till innehållet
AI-grafen
E· Universitetrag-informationssokning· ca 60 min· volatil — kontrolleras ofta· verifierad 2026-09-20

Vektordatabaser och indexering

Kunna välja index (HNSW, IVF), förstå avvägningen recall/latens, och använda Qdrant eller pgvector.

Förkunskaper

Intuition

Att jämföra en frågevektor med en miljon dokumentvektorer exakt tar ~100 ms på CPU — för långsamt per fråga. Approximativ närmaste-granne-sökning (ANN) byter lite recall mot mycket hastighet.

  • HNSW: en graf i flera lager där varje vektor länkar till sina grannar; sökningen hoppar girigt neråt. Snabb, hög recall, minneskrävande (grafen ligger i RAM). Parametrar: M (grannar), ef (sökbredd — högre = bättre recall, långsammare).
  • IVF: klustra vektorerna; sök bara i de nprobe närmaste klustren. Mindre minne, lite lägre recall.
  • Kvantisering (PQ/scalar) krymper vektorerna 4–32× med liten kvalitetsförlust.

Metadatafilter (språk, licens, datum) ska göras i indexet, inte efteråt — annars kan topp-k bli tomt efter filtrering. Mät alltid recall@k mot brute force på ett stickprov.

Kod

from qdrant_client import QdrantClient, models as qm
import numpy as np

q = QdrantClient("http://localhost:6333")
q.recreate_collection("docs", vectors_config=qm.VectorParams(size=768, distance=qm.Distance.COSINE),
                      hnsw_config=qm.HnswConfigDiff(m=16, ef_construct=128))
q.upsert("docs", points=[qm.PointStruct(id=i, vector=v.tolist(), payload={"lang": "sv", "license": "CC-BY"}) for i, v in enumerate(vecs)])

hits = q.search("docs", query_vector=qv.tolist(), limit=10, search_params=qm.SearchParams(hnsw_ef=64),
                query_filter=qm.Filter(must=[qm.FieldCondition(key="license", match=qm.MatchValue(value="CC-BY"))]))

# recall mot exakt
exakt = np.argsort(-(vecs @ qv))[:10]
print(len(set(h.id for h in hits) & set(exakt)) / 10)

pgvector: CREATE INDEX ON chunk USING hnsw (emb vector_cosine_ops); SELECT … ORDER BY emb <=> $1 LIMIT 10 med WHERE license = 'CC-BY' i samma fråga.

Behärskning innebär

  • Förklarar HNSW och IVF och avvägningen recall/latens
  • Använder Qdrant eller pgvector med metadatafilter
  • Mäter recall mot exakt sökning

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser