Ga naar de hoofdinhoud
BVDNET
Arnhem · websites & automatiseringBVDNET
Tools & Frameworks

Vectordatabase

Een vectordatabase slaat teksten of producten op als reeksen getallen die hun betekenis vastleggen, zodat een zoekfunctie of AI-chatbot vindt wat bij een vraag past.

Ook bekend als: vector DB, vector store, vector search engine, vectoropslag

Een vectordatabase slaat teksten, afbeeldingen of producten op als reeksen getallen die hun betekenis vastleggen, embeddings, en vindt de exemplaren die het dichtst bij een vraag liggen. De zoekfunctie van een webshop vindt dan "warme laarzen voor de winter" als in de producttekst "gevoerde snowboots" staat, en een chatbot vindt de juiste passage in je handleidingen. In een RAG-systeem vindt de vectordatabase de passages waaruit de AI antwoordt.

Hoe werkt het?

Een vectordatabase bewaart elke embedding samen met de inhoud en metadata, zoals het brondocument, een datum of een productcategorie. Een vraag wordt met hetzelfde embeddingmodel omgezet in een vector, en de database geeft de opgeslagen vectoren terug die er het dichtst bij liggen, gemeten met een maat als cosine similarity. Een traditionele database zoekt vooral records op die exact overeenkomen; een vectordatabase zoekt op gelijkenis (Wikipedia).

Het exacte antwoord vraagt om de vraag met elke opgeslagen vector te vergelijken, wat de makers van Meta's Faiss-bibliotheek brute-force search noemen: het werk groeit met elke vector die erbij komt. Vectordatabases gebruiken daarom indexen voor approximate nearest neighbour search (ANN), die maar een deel van de verzameling bekijken en daardoor sommige echte buren kunnen missen:

  • HNSW (Malkov en Yashunin, 2016) verbindt de vectoren in een graaf met meerdere lagen. Een zoektocht begint in de dunne bovenste laag en werkt naar beneden, met een inspanning die logaritmisch groeit met het aantal vectoren.
  • IVF (inverted file) deelt de vectoren bij het indexeren in clusters in en doorzoekt alleen de clusters die het dichtst bij de vraag liggen (Douze e.a., 2024).
  • Product quantization (PQ) knipt elke vector in delen en bewaart per deel een korte code, zodat vectoren minder geheugen kosten ten koste van wat nauwkeurigheid, een vorm van kwantisatie.

Het Faiss-artikel beschrijft de keuze als een afweging tussen snelheid, geheugen en nauwkeurigheid. Graafindexen passen bij verzamelingen tot ongeveer een miljoen vectoren als geheugen geen beperking is. Boven tien miljoen vectoren wordt de bouwtijd de beperkende factor, en voor verzamelingen die alleen gecomprimeerd in het geheugen passen, zijn IVF-indexen de enige optie.

Welke soorten zijn er?

Er zijn aparte vectordatabases zoals Pinecone, Weaviate, Qdrant, Milvus en Chroma, bibliotheken zoals Faiss, en uitbreidingen op bestaande databases. pgvector voegt bijvoorbeeld vectorzoeken toe aan PostgreSQL, zodat de vectoren bij de rest van je gegevens staan en je ze met gewone SQL kunt filteren.

Waar gaat het mis?

  • Resultaten veranderen met de index. Standaard zoekt pgvector exact, met perfecte recall. De documentatie waarschuwt dat je na het toevoegen van een benaderende index andere resultaten op dezelfde zoekvragen krijgt.
  • Filters en indexen zitten elkaar in de weg. In pgvector wordt een filter toegepast nadat de benaderende index is doorzocht. Past een voorwaarde op 10% van de rijen, dan levert een HNSW-zoekvraag met de standaardinstelling van 40 kandidaten gemiddeld maar zo'n 4 passende rijen op, tenzij iteratieve indexscans aanstaan (documentatie, september 2026).
  • Exacte termen. Vectorzoeken kan exacte termen missen, zoals een foutcode (semantisch zoeken). pgvector raadt aan het te combineren met de full-text search van PostgreSQL en de resultaten samen te voegen, bijvoorbeeld met reciprocal rank fusion.
  • Eén model. Opgeslagen vectoren en vragen moeten van hetzelfde embeddingmodel komen, dus een ander model betekent alles opnieuw omzetten.

Voorbeeld

Stel: een webshop met 3.000 producten wil een zoekfunctie die "iets warms voor een winterwandeling" begrijpt. De webshop zet elke productomschrijving één keer om in een embedding en slaat de vectoren op in PostgreSQL met pgvector, naast prijs en voorraad. Elke zoekvraag gaat door hetzelfde model en levert de tien dichtstbijzijnde producten op die op voorraad zijn. Met een paar duizend producten kan de webshop beginnen met de standaard exacte zoekmethode van pgvector. Een HNSW-index wordt nuttig als de catalogus groeit, en vanaf dan kunnen de resultaten iets afwijken van de exacte.