Neo4j-graafdatabase voor GraphRAG, installatie, Cypher, vectoren, Ops

Grafen, Cypher, vectoren en ops-hardening.

Inhoud

Neo4j is waar je naartoe grijpt wanneer de relaties de data zijn. Als je domein eruitziet als een whitebord met cirkels en pijlen, dan is het pijnlijk om dit in tabellen te dwingen.

Neo4j modelleert dat plaatje als een property graph (eigengraf) en queryt het met Cypher.

Graph and data infrastructure

Deze gids dekt waar Neo4j voor wordt gebruikt, ACID-gedrag, Neo4j vs Amazon Neptune vs TigerGraph (en concurrenten), GraphRAG met vector-indexen, paden voor lokale en productie-installatie, poorten en neo4j.conf, en copy-paste patronen voor Cypher en Python.

Voor bredere context over keuzes in data-infrastructuur, zie de Data Infrastructure for AI Systems-hoofdstuk.

Waar wordt Neo4j voor gebruikt in productiewerklasten met grafen?

Neo4j is bedoeld voor verbonden data waarbij je herhaaldelijk verbonden vragen moet stellen, binnen productieve beperkingen. Dat is het directe antwoord op waar Neo4j voor wordt gebruikt in de meeste teams.

Property graph data model met nodes, relaties en eigenschappen

Neo4j gebruikt het property graph-model: nodes vertegenwoordigen entiteiten, relaties verbinden nodes, en beide kunnen eigenschappen hebben. Labels en relatietyperingen geven structuur zonder je vast te pinnen aan een breekbaar schema.

Je kunt beginnen met een dun model, waarde leveren, en de graaf laten evolueren naarmate nieuwe vragen ontstaan.

Cypher graafquerytaal voor patroonmatching zonder joinsoep

Cypher is declaratief en gebouwd rond patroonmatching. Je beschrijft de vormen van subgrafieën en laat de planner ze uitvoeren.

Als SQL gaat over sets, gaat Cypher over subgrafieën. Dat maakt uit voor multi-hop traversals, pad-query’s, aanbevelingen, herkomst en vragen zoals “wie heeft wat via welk systeem aangeraakt”.

Is Neo4j ACID-compliant en waarom moet je daar om geven?

Is Neo4j ACID-compliant? Ja. Het maken of updaten van relaties raakt de samenhangende structuur aan; de database behoudt dat consistent bij failures en concurrentie.

Ontwerp graf-apps rondom sterke transactiegaranties, tenzij je daartoe gedwongen wordt. Dat maakt debuggen en redeneren over gedrag veel makkelijker dan uit te gaan van vaag eventuele consistentie.

Neo4j vs Amazon Neptune vs TigerGraph: een vergelijking door een senior engineer

Een “Neo4j vs X”-vraag is meestal “In welk ecosysteem gaan we voor jaren leven?”.

Korte, opiniërende visie—over engineeringtijd, niet over benchmarkslides.

Product Kernmodel en query-stijl Waar het wint Waar het bijt
Neo4j Property graph en Cypher Sterke ergonomie voor verbonden data, volwassen tooling, graaf plus vector-retrieval Graafmodelleren is een vaardigheid waarin je moet investeren
Amazon Neptune Beheerde graaf op AWS (Gremlin, openCypher, SPARQL voor RDF) AWS-gecentreerde contracten en operaties Mix van querytalen kan platformgedreven aanvoelen
TigerGraph GSQL en OpenCypher-gerelateerde patronen Analytics-stijl werklasten en compiled query-aanpakken Ander mentaal model; niet overal een drop-in Cypher
JanusGraph Gedistribueerde graaf met externe opslagbackends Open source met pluggable backends Je beheert de backend-stack zelf
ArangoDB Multi-model (documenten, KV, graaf) Één database voor gemengde vormen Diepgang van graaf varieert vergeleken met graaf-first engines
Memgraph Property graph, Cypher-compatibel Streaming en workflows met verse data Enginegedrag verschilt; compatibiliteit is geen identiteit

Wat moet je beslissen voordat je een graafdatabase kiest?

Kies eerst de querytaal en het operatiemodel.

Als je team Cypher wil en een graaf-first workflow, is Neo4j een sterke standaardkeuze. Als je al expertise hebt in Gremlin, kunnen Neptune of JanusGraph passen. Als je één multi-model store wilt, kan ArangoDB het aantal onderdelen verminderen.

Wees eerlijk over operaties. “We gaan een gedistribueerde opslagbackend draaien” is makkelijk te zeggen totdat je om 03:00 uur gepaged wordt over compaction of JVM-druk.

Neo4j voor RAG en GraphRAG: vectors Zoeken plus graafcontext

Veel RAG-stacks beginnen als vector search plus prompt. Dat werkt totdat je herkomst, entiteitsresolutie, multi-hop context of disambiguatie nodig hebt—dan riskeer je het herbouwen van een knowledge graph in applicatiecode.

Hoe verbetert GraphRAG Retrieval Augmented Generation? Het gebruikt de graaf om gestructureerde context te halen—entiteiten, relaties, buren—dat similariteit alleen vaak mist, wat helpt bij grounding (gronding) en betrouwbaarheid.

Kan Neo4j vector search doen voor RAG? Ja. Neo4j ondersteunt vector-indexen voor similariteit over embeddings (meestal HNSW-stijl benaderde nearest neighbour-zoektocht).

Vectoren vinden “dingen die er vergelijkbaar uitzien”. Ze coderen niet op zichzelf “hoe ze samenhangen” in je domein. Neo4j laat je similariteit combineren met traversals.

Gebruik van de SEARCH subclause voor vector-beperkte patroonmatching

De SEARCH subclause van Neo4j laat je een Cypher MATCH-patroon beperken met approximate nearest neighbour hits van een vector-index. Dat is de ergonomische brug voor hybride retrieval.

Praktisch patroon: vectorretrieval voor kandidaten, daarna graaf-expansie voor context, filters en uitleg.

GraphRAG in Python met neo4j-graphrag

Het neo4j-graphrag-pakket van Neo4j voor Python koppelt een driver, retriever en LLM-interface aan een GraphRAG-flow. Je kunt nog steeds externe vector-opslag gebruiken als je verantwoordelijkheden wilt splitsen.

Hoe installeer je Neo4j lokaal en in productie?

Hoe installeer je Neo4j lokaal? Pas de optie aan je risicoprofiel aan.

Installeer Neo4j met Docker voor lokale ontwikkeling

Docker is het snelste pad naar een reproduceerbare server.

# Minimale run. Data wordt NIET bewaard tussen herstarts.
docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  neo4j:5

Voor echt werk, stel een initieel wachtwoord in en mount een data-volume.

docker run \
  --restart always \
  --publish=7474:7474 --publish=7687:7687 \
  --env NEO4J_AUTH=neo4j/jouw_wachtwoord \
  --volume=$HOME/neo4j/data:/data \
  neo4j:5

Docker Compose voor een teamvriendelijke setup

services:
  neo4j:
    image: neo4j:5
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/jouw_wachtwoord
    volumes:
      - $HOME/neo4j/logs:/logs
      - $HOME/neo4j/config:/config
      - $HOME/neo4j/data:/data
      - $HOME/neo4j/plugins:/plugins
    restart: always

Neo4j Desktop

Neo4j Desktop is sterk voor prototyping en lesgeven—projecten, GUI, lokale instanties. Voor CI en integratietests wint Docker meestal.

Linux, Windows of macOS servers

Voor langlopende hosts, volg de officiële OS-installatiepaden. Je zult uiteindelijk om servicebeheer, logs, geheugen, back-ups en upgrades geven.

Neo4j AuraDB (beheerd)

Als je liever producten levert dan databases draait, is AuraDB de beheerde Neo4j-cloudoptie.

Kubernetes met Helm

Als het platform Kubernetes is, gebruik dan de Helm-based deployment en exposeer Bolt en HTTP via services. Draai alleen databases op K8s als je organisatie staat betrouwbaar daar kan draaien.

Neo4j configuratie essentieel: poorten, connectoren en neo4j.conf

Instellingen zitten in neo4j.conf (key=value, # commentaren). Strikte validatie helpt typos te vangen voordat je verkeer serveert.

Standaard Neo4j poorten en connectoren

Wat zijn de standaard Neo4j poorten? Bolt 7687, HTTP 7474, HTTPS 7473 als standaard. In productie, exposeer alleen wat je nodig hebt; vaak Bolt op een privaat netwerk en HTTP UI beperkt.

Voorbeeld van hardening (pas IP’s en TLS aan op je omgeving):

server.bolt.listen_address=10.0.1.10:7687
server.http.listen_address=127.0.0.1:7474
server.https.enabled=true
server.https.listen_address=10.0.1.10:7473

Transactiestellingen die onbeperkte schade beperken

Nuttige hendels in reviews zijn db.transaction.timeout voor weggevluchte query’s en db.transaction.concurrent.maximum om onstuimige menigten te voorkomen.

db.transaction.timeout=10s
db.transaction.concurrent.maximum=1000

Praktische Cypher en vector index voorbeelden voor RAG

Maak een vector index en sla embeddings op

CREATE VECTOR INDEX doc_embeddings
FOR (d:Document) ON (d.embedding)
OPTIONS {indexConfig: {
  `vector.dimensions`: 1536,
  `vector.similarity_function`: "cosine"
}};

Vector retrieval en daarna graaf-expansie

  1. Vector search voor kandidaat nodes.
  2. Traverse voor buren, herkomst en beperkingen.
  3. Formateer context voor de LLM met duidelijke grenzen.

Voorbeeld met SEARCH binnen MATCH (syntax kan iets variëren per Neo4j-versie—check de handleiding voor je serverversie):

MATCH (d:Document)
  SEARCH d IN (
    VECTOR INDEX doc_embeddings
    FOR $queryEmbedding
    LIMIT 10
  ) SCORE AS score
MATCH (d)-[:MENTIONS]->(e:Entity)
RETURN d.id AS doc_id, score, collect(distinct e.name) AS entities
ORDER BY score DESC
LIMIT 5;

Minimale GraphRAG in Python

from neo4j import GraphDatabase
from neo4j_graphrag.retrievers import VectorRetriever
from neo4j_graphrag.embeddings import OpenAIEmbeddings
from neo4j_graphrag.llm import OpenAILLM
from neo4j_graphrag.generation import GraphRAG

driver = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j", "password"))

embedder = OpenAIEmbeddings(model="text-embedding-3-large")
retriever = VectorRetriever(driver, "doc_embeddings", embedder)

llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})

rag = GraphRAG(retriever=retriever, llm=llm)

response = rag.search(query_text="Hoe doe ik similarity search in Neo4j?", retriever_config={"top_k": 5})
print(response.answer)

Real-world Neo4j gebruiksscenario’s: fraude, aanbevelingen en knowledge graphs

Fraudedetectie en risicografen

Fraude is zelden één rij. Het zijn patronen over accounts, apparaten, IP’s, merchants, identiteiten en tijd. Grafen drukken buren en multi-hop paden uit zonder tien-weg join-labyrinten.

Aanbevelingen met gedrag en expliciete relaties

Productieaanbevelingen combineren gescoorde kandidaten met inventaris, beperkingen, hiërarchieën en uitlegbaarheid. Grafen helpen je paden terug te geven waar mensen over kunnen redeneren.

Knowledge graphs voor RAG en agents

RAG heeft gronding nodig; agents hebben geheugen, herkomst en beperkingen nodig. Een knowledge graph slaat entiteiten, relaties, bronnen en embeddings op in één model—natuurlijke fit voor GraphRAG.

Wanneer moet je Neo4j kiezen boven Amazon Neptune of TigerGraph?

Wanneer moet je Neo4j kiezen boven Amazon Neptune of TigerGraph? Kies Neo4j voor een Cypher-first graaf en vector + traversal in één product. Kies Neptune wanneer AWS en Gremlin of RDF overeenkomen met je organisatie. Kies TigerGraph wanneer GSQL en analytics-stijl werklasten de primaire inzet zijn.