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
nprobenä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
- arXiv — Efficient and robust approximate nearest neighbor search using HNSW graphs — arXiv (öppen åtkomst; licens per artikel)
- Qdrant — dokumentation (Apache-2.0) — Apache-2.0