Base de datos gráfica Neo4j para GraphRAG, instalación, Cypher, vectores y operaciones.
Grafos, Cypher, vectores y endurecimiento de operaciones.
Neo4j es a lo que recurres cuando las relaciones son los datos. Si tu dominio parece un pizarrón lleno de círculos y flechas, forzarlo en tablas es doloroso.
Neo4j modela esa imagen como un grafo de propiedades y lo consulta con Cypher.

Esta guía cubre para qué se usa Neo4j, el comportamiento ACID, Neo4j frente a Amazon Neptune y TigerGraph (y sus pares), GraphRAG con índices vectoriales, rutas de instalación local y en producción, puertos y neo4j.conf, y patrones de Cypher y Python listos para copiar y pegar.
Para un contexto más amplio sobre las opciones de infraestructura de datos, consulta el pilar Infraestructura de datos para sistemas de IA.
¿Para qué se usa Neo4j en cargas de trabajo de grafos en producción
Neo4j está diseñado para datos conectados donde necesitas hacer preguntas conectadas, repetidamente, bajo restricciones de producción. Esa es la respuesta directa a para qué se usa Neo4j en la mayoría de los equipos.
Modelo de datos de grafo de propiedades con nodos, relaciones y propiedades
Neo4j utiliza el modelo de grafo de propiedades: los nodos representan entidades, las relaciones conectan nodos y ambos pueden tener propiedades. Las etiquetas y los tipos de relaciones dan estructura sin encerrarte en un esquema frágil.
Puedes comenzar con un modelo ligero, entregar valor y evolucionar el grafo a medida que surjan nuevas preguntas.
Lenguaje de consulta de grafos Cypher para coincidencia de patrones sin “sopa de joins”
Cypher es declarativo y está construido alrededor de la coincidencia de patrones. Describes las formas de los subgrafos y dejas que el planificador los ejecute.
Si SQL trata sobre conjuntos, Cypher trata sobre subgrafos. Esto es crucial para la navegación multitransito, consultas de rutas, recomendaciones, procedencia y preguntas del tipo “quién tocó qué a través de qué sistema”.
¿Es Neo4j compatible con ACID y por qué deberías importarte
¿Es Neo4j compatible con ACID? Sí. Crear o actualizar relaciones afecta a una estructura coherente; la base de datos mantiene esa consistencia ante fallos y concurrencia.
Diseña aplicaciones de grafos alrededor de garantías transaccionales sólidas a menos que te veas obligado a hacer lo contrario. Esto hace que la depuración y el razonamiento sobre el comportamiento sean mucho más fáciles que asumir una consistencia eventual vaga.
Neo4j vs Amazon Neptune vs TigerGraph: una comparación de ingeniero senior
Una pregunta de tipo “Neo4j frente a X” suele ser “¿En qué ecosistema viviremos durante años?”.
Opinión breve y personal: se trata del tiempo de ingeniería, no de diapositivas de benchmarks.
| Producto | Modelo central y estilo de consulta | Dónde destaca | Dónde puede fallar |
|---|---|---|---|
| Neo4j | Grafo de propiedades y Cypher | Ergonomía sólida para datos conectados, herramientas maduras, grafos más recuperación vectorial | La modelización de grafos es una habilidad en la que debes invertir |
| Amazon Neptune | Grafo gestionado en AWS (Gremlin, openCypher, SPARQL para RDF) | Contratos y operaciones centrados en AWS | La mezcla de lenguajes de consulta puede sentirse impulsada por la plataforma |
| TigerGraph | GSQL y patrones relacionados con OpenCypher | Cargas de trabajo de estilo analítico y enfoques de consultas compiladas | Modelo mental diferente; Cypher no es compatible en todas partes |
| JanusGraph | Grafo distribuido con backends de almacenamiento externos | Código abierto con backends intercambiables | Tú operas la pila del backend |
| ArangoDB | Multimodelo (documentos, KV, grafo) | Una base de datos para formas mixtas | La profundidad del grafo varía en comparación con motores primero-en-grafo |
| Memgraph | Grafo de propiedades, compatible con Cypher | Flujos de trabajo de transmisión y datos frescos | El comportamiento del motor difiere; la compatibilidad no es identidad |
Qué decidir antes de elegir una base de datos de grafos
Elige primero el lenguaje de consulta y el modelo de operaciones.
Si tu equipo quiere Cypher y un flujo de trabajo primero-en-grafo, Neo4j es una opción predeterminada sólida. Si ya tienes experiencia en Gremlin, Neptune o JanusGraph pueden encajar. Si quieres un almacén de datos multimodelo, ArangoDB puede reducir las piezas móviles.
Sé honesto sobre las operaciones. “Ejecutaremos un backend de almacenamiento distribuido” es fácil de decir hasta que te llaman a las 03:00 por problemas de compactación o presión en el JVM.
Neo4j para RAG y GraphRAG: búsqueda vectorial más contexto de grafos
Muchas pilas de RAG comienzan como búsqueda vectorial más prompt. Eso funciona hasta que necesitas procedencia, resolución de entidades, contexto multitransito o desambiguación; entonces corres el riesgo de reconstruir un grafo de conocimiento en el código de la aplicación.
¿Cómo mejora GraphRAG la generación aumentada por recuperación? Utiliza el grafo para extraer contexto estructurado: entidades, relaciones y vecindades que la similitud por sí sola a menudo pasa por alto, lo que ayuda a la fundamentación y la confiabilidad.
Índice vectorial de Neo4j para búsqueda de similitud de incrustaciones
¿Puede Neo4j hacer búsqueda vectorial para RAG? Sí. Neo4j admite índices vectoriales para similitud sobre incrustaciones (comúnmente búsqueda de vecinos más cercanos aproximada estilo HNSW).
Los vectores encuentran “cosas que se parecen”. Por sí mismos, no codifican “cómo se relacionan” en tu dominio. Neo4j te permite combinar similitud con navegación.
Uso de la subcláusula SEARCH para coincidencia de patrones con restricciones vectoriales
La subcláusula SEARCH de Neo4j te permite restringir un patrón MATCH de Cypher usando hits de vecinos más cercanos aproximados de un índice vectorial. Esa es la puente ergonómico para la recuperación híbrida.
Patrón práctico: recuperación vectorial para candidatos, luego expansión de grafo para contexto, filtros y explicación.
GraphRAG en Python con neo4j-graphrag
El paquete neo4j-graphrag de Neo4j para Python conecta un controlador, un recuperador y una interfaz de LLM en un flujo de GraphRAG. Aún puedes usar almacenes vectoriales externos si quieres dividir responsabilidades.
Cómo instalar Neo4j localmente y en producción
¿Cómo instalas Neo4j localmente? Ajusta la opción a tu perfil de riesgo.
Instalar Neo4j con Docker para desarrollo local
Docker es la ruta más rápida hacia un servidor repetible.
# Ejecución mínima. Los datos NO se persisten entre reinicios.
docker run \
--restart always \
--publish=7474:7474 --publish=7687:7687 \
neo4j:5
Para trabajo real, establece una contraseña inicial y monta un volumen de datos.
docker run \
--restart always \
--publish=7474:7474 --publish=7687:7687 \
--env NEO4J_AUTH=neo4j/tu_contrasena \
--volume=$HOME/neo4j/data:/data \
neo4j:5
Docker Compose para una configuración amigable para el equipo
services:
neo4j:
image: neo4j:5
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_AUTH=neo4j/tu_contrasena
volumes:
- $HOME/neo4j/logs:/logs
- $HOME/neo4j/config:/config
- $HOME/neo4j/data:/data
- $HOME/neo4j/plugins:/plugins
restart: always
Neo4j Desktop
Neo4j Desktop es excelente para prototipado y enseñanza: proyectos, interfaz gráfica, instancias locales. Para CI y pruebas de integración, Docker suele ganar.
Servidores Linux, Windows o macOS
Para hosts de larga duración, sigue las rutas de instalación oficiales del SO. Eventualmente te importará la gestión de servicios, registros, memoria, copias de seguridad y actualizaciones.
Neo4j AuraDB (gestionado)
Si prefieres lanzar productos a ejecutar bases de datos, AuraDB es la opción de nube gestionada de Neo4j.
Kubernetes con Helm
Si la plataforma es Kubernetes, usa el despliegue basado en Helm y expone Bolt y HTTP a través de servicios. Solo despliega bases de datos en K8s si tu organización puede ejecutar estado de forma fiable allí.
Esenciales de configuración de Neo4j: puertos, conectores y neo4j.conf
La configuración vive en neo4j.conf (clave=valor, comentarios con #). La validación estricta ayuda a detectar errores tipográficos antes de servir tráfico.
Puertos y conectores predeterminados de Neo4j
¿Cuáles son los puertos predeterminados de Neo4j? Bolt 7687, HTTP 7474, HTTPS 7473 por defecto. En producción, expón solo lo que necesitas; a menudo Bolt en una red privada y la interfaz HTTP restringida.
Ejemplo de endurecimiento (adapta IPs y TLS a tu entorno):
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
Configuraciones de transacción que limitan daños ilimitados
Palancas útiles en revisiones incluyen db.transaction.timeout para consultas descontroladas y db.transaction.concurrent.maximum para evitar el problema de la “multitud de truenos”.
db.transaction.timeout=10s
db.transaction.concurrent.maximum=1000
Ejemplos prácticos de Cypher e índices vectoriales para RAG
Crear un índice vectorial y almacenar incrustaciones
CREATE VECTOR INDEX doc_embeddings
FOR (d:Document) ON (d.embedding)
OPTIONS {indexConfig: {
`vector.dimensions`: 1536,
`vector.similarity_function`: "cosine"
}};
Recuperación vectorial y luego expansión de grafo
- Búsqueda vectorial para nodos candidatos.
- Navegar para vecinos, procedencia y restricciones.
- Formatear el contexto para el LLM con límites claros.
Ejemplo usando SEARCH dentro de MATCH (la sintaxis puede variar ligeramente según la versión de Neo4j, consulta el manual para tu versión de servidor):
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 mínimo en 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="How do I do similarity search in Neo4j?", retriever_config={"top_k": 5})
print(response.answer)
Casos de uso reales de Neo4j: fraude, recomendaciones y grafos de conocimiento
Detección de fraude y grafos de riesgo
El fraude rara vez es una sola fila. Son patrones a través de cuentas, dispositivos, IPs, comerciantes, identidades y tiempo. Los grafos expresan vecindades y rutas multitransito sin laberintos de joins decenarios.
Recomendaciones con comportamiento y relaciones explícitas
Las recomendaciones de producción combinan candidatos puntuados con inventario, restricciones, jerarquías y explicabilidad. Los grafos te ayudan a devolver rutas sobre las que las personas puedan razonar.
Grafos de conocimiento para RAG y agentes
RAG necesita fundamentación; los agentes necesitan memoria, procedencia y restricciones. Un grafo de conocimiento almacena entidades, relaciones, fuentes e incrustaciones en un solo modelo: ajuste natural para GraphRAG.
¿Cuándo deberías elegir Neo4j sobre Amazon Neptune o TigerGraph?
¿Cuándo deberías elegir Neo4j sobre Amazon Neptune o TigerGraph? Elige Neo4j para un grafo primero-en-Cypher y vectorial + navegación en un solo producto. Elige Neptune cuando AWS y Gremlin o RDF se alineen con tu organización. Elige TigerGraph cuando GSQL y las cargas de trabajo de estilo analítico sean la apuesta principal.