Database grafico Neo4j per GraphRAG, installazione, Cypher, vettori e operazioni.
Grafici, Cypher, vettori e rafforzamento delle operazioni.
Neo4j è la soluzione a cui si ricorre quando le relazioni sono i dati. Se il tuo dominio assomiglia a una lavagna piena di cerchi e frecce, forzare tutto in tabelle è doloroso.
Neo4j modella questa immagine come un grafo a proprietà e lo interroga con Cypher.

Questa guida copre a cosa serve Neo4j, il comportamento ACID, il confronto Neo4j vs Amazon Neptune vs TigerGraph (e simili), GraphRAG con indici vettoriali, i percorsi per l’installazione locale e in produzione, le porte e neo4j.conf, nonché modelli Cypher e Python pronti per il copia-incolla.
Per un contesto più ampio sulle scelte infrastrutturali, consulta il pilastro Infrastruttura dati per sistemi AI.
A cosa serve Neo4j nei carichi di lavoro grafici in produzione
Neo4j è destinato ai dati connessi quando devi porre domande connesse, ripetutamente, nel rispetto dei vincoli di produzione. Questa è la risposta diretta alla domanda a cosa serve Neo4j per la maggior parte dei team.
Modello di dati a grafo a proprietà con nodi, relazioni e proprietà
Neo4j utilizza il modello a grafo a proprietà: i nodi rappresentano entità, le relazioni connettono i nodi e entrambi possono avere proprietà. Etichette e tipi di relazione forniscono struttura senza bloccarti in uno schema fragile.
Puoi iniziare con un modello snello, fornire valore ed evolvere il grafo man mano che emergono nuove domande.
Linguaggio di interrogazione Cypher per il pattern matching senza l’ingorghi delle join
Cypher è dichiarativo e basato sul pattern matching. Descrivi le forme dei sottografi e lasci che il pianificatore le esegua.
Se SQL riguarda gli insiemi, Cypher riguarda i sottografi. Questo è fondamentale per le traversate multi-hop, le query di percorso, le raccomandazioni, la provenienza e domande come “chi ha toccato cosa attraverso quale sistema”.
Neo4j è conforme ACID e perché dovresti interessartene
Neo4j è conforme ACID? Sì. Creare o aggiornare relazioni tocca una struttura coerente; il database mantiene questa coerenza in caso di guasti e concorrenza.
Progetta le applicazioni grafiche basandoti su garanzie transazionali solide, a meno che tu non sia costretto a fare altrimenti. Questo rende il debug e il ragionamento sul comportamento molto più semplici rispetto all’assumere una vaga coerenza eventuale.
Neo4j vs Amazon Neptune vs TigerGraph: un confronto tra ingegneri senior
Una domanda del tipo “Neo4j vs X” è solitamente “In quale ecosistema vivremo per anni?”.
Una visione breve e opinata — sul tempo di ingegneria, non sulle slide dei benchmark.
| Prodotto | Modello principale e stile di interrogazione | Dove vince | Dove può causare problemi |
|---|---|---|---|
| Neo4j | Grafo a proprietà e Cypher | Ergonomia eccellente per dati connessi, strumenti maturi, grafo più recupero vettoriale | La modellazione del grafo è una competenza su cui devi investire |
| Amazon Neptune | Grafo gestito su AWS (Gremlin, openCypher, SPARQL per RDF) | Contratti e operazioni incentrati su AWS | La miscela di linguaggi di query può sembrare guidata dalla piattaforma |
| TigerGraph | GSQL e pattern correlati a OpenCypher | Carichi di lavoro analitici e approcci di query compilati | Modello mentale diverso; Cypher non è ovunque plug-and-play |
| JanusGraph | Grafo distribuito con backend di archiviazione esterni | Open source con backend plug-in | Devi gestire lo stack del backend |
| ArangoDB | Multi-modello (documenti, KV, grafo) | Un database per forme miste | La profondità del grafo varia rispetto ai motori first-graph |
| Memgraph | Grafo a proprietà, compatibile con Cypher | Workflow di streaming e dati freschi | Il comportamento del motore differisce; la compatibilità non è identità |
Cosa decidere prima di scegliere un database a grafo
Scegli prima il linguaggio di query e il modello operativo.
Se il tuo team desidera Cypher e un workflow incentrato sul grafo, Neo4j è un’opzione predefinita solida. Se hai già competenze su Gremlin, Neptune o JanusGraph possono adattarsi. Se desideri un archivio multi-modello unico, ArangoDB può ridurre le parti mobili.
Sii onesto riguardo alle operazioni. “Gestiremo un backend di archiviazione distribuito” è facile da dire finché non vieni chiamato per risolvere problemi di compattazione o pressione della JVM alle 03:00.
Neo4j per RAG e GraphRAG: ricerca vettoriale più contesto grafico
Molti stack RAG iniziano come ricerca vettoriale più prompt. Questo funziona finché non hai bisogno di provenienza, risoluzione delle entità, contesto multi-hop o disambiguazione, momento in cui rischi di ricostruire un grafo della conoscenza nel codice dell’applicazione.
Come GraphRAG migliora la generazione aumentata dal recupero? Utilizza il grafo per estrarre contesto strutturato — entità, relazioni, vicinanze — che la sola similarità spesso perde, aiutando il grounding (ancoraggio) e l’affidabilità.
Indice vettoriale Neo4j per la ricerca di similarità delle embedding
Neo4j può eseguire ricerche vettoriali per RAG? Sì. Neo4j supporta indici vettoriali per la similarità sulle embedding (comunemente ricerca approssimata del vicino più prossimo stile HNSW).
I vettori trovano “cose che sembrano simili”. Da soli non codificano “come si relazionano” nel tuo dominio. Neo4j ti permette di combinare similarità con traversate.
Utilizzo della sottoclause SEARCH per il pattern matching vincolato vettoriale
La sottoclause SEARCH di Neo4j ti permette di vincolare un pattern MATCH di Cypher utilizzando i risultati approssimativi del vicino più prossimo da un indice vettoriale. Questo è il ponte ergonomico per il recupero ibrido.
Pattern pratico: recupero vettoriale per i candidati, poi espansione del grafo per contesto, filtri e spiegazioni.
GraphRAG in Python con neo4j-graphrag
Il pacchetto neo4j-graphrag di Neo4j per Python collega un driver, un recuperatore e un’interfaccia LLM in un flusso GraphRAG. Puoi comunque utilizzare archivi vettoriali esterni se desideri separare le responsabilità.
Come installare Neo4j localmente e in produzione
Come si installa Neo4j localmente? Scegli l’opzione in base al tuo profilo di rischio.
Installa Neo4j con Docker per lo sviluppo locale
Docker è la via più rapida per un server ripetibile.
# Esecuzione minima. I dati NON vengono persistiti tra i riavvii.
docker run \
--restart always \
--publish=7474:7474 --publish=7687:7687 \
neo4j:5
Per un lavoro reale, imposta una password iniziale e monta un volume dati.
docker run \
--restart always \
--publish=7474:7474 --publish=7687:7687 \
--env NEO4J_AUTH=neo4j/your_password \
--volume=$HOME/neo4j/data:/data \
neo4j:5
Docker Compose per una configurazione adatta al team
services:
neo4j:
image: neo4j:5
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_AUTH=neo4j/your_password
volumes:
- $HOME/neo4j/logs:/logs
- $HOME/neo4j/config:/config
- $HOME/neo4j/data:/data
- $HOME/neo4j/plugins:/plugins
restart: always
Neo4j Desktop
Neo4j Desktop è eccellente per prototipazione e insegnamento: progetti, interfaccia grafica, istanze locali. Per CI e test di integrazione, Docker vince solitamente.
Server Linux, Windows o macOS
Per host in esecuzione prolungata, segui le procedure di installazione ufficiali del sistema operativo. Alla fine ti preoccuperai della gestione dei servizi, dei log, della memoria, dei backup e degli aggiornamenti.
Neo4j AuraDB (gestito)
Se preferisci lanciare prodotti piuttosto che gestire database, AuraDB è l’opzione cloud gestita di Neo4j.
Kubernetes con Helm
Se la piattaforma è Kubernetes, utilizza il deployment basato su Helm ed espone Bolt e HTTP attraverso i servizi. Distribuisci database su K8s solo se la tua organizzazione può gestire lo stato in modo affidabile lì.
Elementi essenziali della configurazione Neo4j: porte, connettori e neo4j.conf
Le impostazioni risiedono in neo4j.conf (key=value, commenti #). Una validazione rigorosa aiuta a catturare refusi prima di servire il traffico.
Porte e connettori predefiniti di Neo4j
Quali sono le porte predefinite di Neo4j? Bolt 7687, HTTP 7474, HTTPS 7473 di default. In produzione, espone solo ciò di cui hai bisogno; spesso Bolt su una rete privata e UI HTTP con restrizioni.
Esempio di hardening (adatta IP e TLS al tuo ambiente):
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
Impostazioni transazionali che limitano danni illimitati
Le leve utili nelle revisioni includono db.transaction.timeout per query fuori controllo e db.transaction.concurrent.maximum per evitare il fenomeno del “thundering herd”.
db.transaction.timeout=10s
db.transaction.concurrent.maximum=1000
Esempi pratici di Cypher e indici vettoriali per RAG
Creare un indice vettoriale e memorizzare embedding
CREATE VECTOR INDEX doc_embeddings
FOR (d:Document) ON (d.embedding)
OPTIONS {indexConfig: {
`vector.dimensions`: 1536,
`vector.similarity_function`: "cosine"
}};
Recupero vettoriale seguito da espansione del grafo
- Ricerca vettoriale per i nodi candidati.
- Traversa per vicini, provenienza e vincoli.
- Formatta il contesto per il LLM con confini chiari.
Esempio utilizzando SEARCH all’interno di MATCH (la sintassi può variare leggermente a seconda della versione di Neo4j: controlla il manuale per la versione del tuo server):
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;
GraphRAG minimale 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="Come eseguo una ricerca per similarità in Neo4j?", retriever_config={"top_k": 5})
print(response.answer)
Casi d’uso reali di Neo4j: frodi, raccomandazioni e grafi della conoscenza
Rilevamento frodi e grafi di rischio
Le frodi raramente sono una singola riga. Sono pattern attraverso conti, dispositivi, IP, merchant, identità e tempo. I grafi esprimono vicinanze e percorsi multi-hop senza labirinti di join decuplici.
Raccomandazioni con comportamenti e relazioni esplicite
Le raccomandazioni in produzione combinano candidati valutati con inventario, vincoli, gerarchie ed spiegabilità. I grafi ti aiutano a restituire percorsi su cui le persone possono ragionare.
Grafi della conoscenza per RAG e agenti
RAG ha bisogno di grounding (ancoraggio); gli agenti hanno bisogno di memoria, provenienza e vincoli. Un grafo della conoscenza memorizza entità, relazioni, fonti e embedding in un unico modello — un adattamento naturale per GraphRAG.
Quando scegliere Neo4j rispetto ad Amazon Neptune o TigerGraph?
Quando dovresti scegliere Neo4j rispetto ad Amazon Neptune o TigerGraph? Scegli Neo4j per un grafo Cypher-first e vettoriale + traversata in un unico prodotto. Scegli Neptune quando AWS e le linee Gremlin o RDF si allineano alla tua organizzazione. Scegli TigerGraph quando GSQL e carichi di lavoro analitici sono la scommessa principale.