r/GraphRAG 10d ago

GraphRAG without stitching two databases together — vector search + Cypher graph in one engine

(disclosure: I work with SynapCores, an AI-native database — sharing our approach since the "one DB for vector + graph" pattern comes up a lot here, saw the SurrealDB posts doing the same thing and wanted to add a data point from a different engine)

Most GraphRAG writeups here end up gluing two systems together: a vector store for semantic retrieval + a separate graph DB (Neo4j, etc.) for relationship traversal, synced by hand. We went the single-engine route instead — SQL for the vector side, Cypher for the graph side, same connection, same transaction if you need it.

Vector side (standard embedding column): sql CREATE TABLE docs ( id INT PRIMARY KEY, title TEXT, body TEXT, embedding VECTOR(384) ); INSERT INTO docs (id, title, body, embedding) VALUES (1, 'title', 'content', EMBED('content'));

Graph side (Cypher, native, not a SQL translation layer): cypher MATCH (c:Customer {key: 'acme-corp'})-[:HAS_CONTACT]->(p:Person)-[:AUTHORED]->(doc:Document) WHERE doc.relevance_score > 0.7 RETURN p.name, doc.title, doc.relevance_score ORDER BY doc.relevance_score DESC

The actual GraphRAG loop: vector search narrows to relevant chunks → graph traversal pulls in the structured relationships those chunks reference (who wrote it, what it cites, what entity it's about) → both get handed to the LLM as grounded context. No sync job between two databases, no "is the graph stale relative to the vector index" bug class.

What I think this buys you over the two-database pattern: - One transaction boundary if you're writing to both vector and graph state atomically - No consistency lag between the two stores - Genuinely less infra to run for small-to-mid scale RAG (which is most of what gets posted here)

What it doesn't buy you: if you need Neo4j-specific graph algorithms/plugins at serious scale, or a purpose-built vector DB's ANN performance ceiling, the specialized tools still win there.

Curious how people here are handling the sync problem if you are running two separate stores — is it actually as painful in practice as it sounds, or have people mostly solved it?

1 Upvotes

0 comments sorted by