{"slug": "using-synapcores-as-a-llamaindex-vector-store-property-graph-store", "title": "Using SynapCores as a LlamaIndex Vector Store + Property Graph Store", "summary": "A developer has published a walkthrough demonstrating how to use SynapCores as a unified backend for both LlamaIndex vector and property graph stores, eliminating the need for separate databases. The integration packages, llama-index-vector-stores-synapcores and llama-index-graph-stores-synapcores, implement the full LlamaIndex abstractions, supporting metadata filtering and graph traversal. The project includes 48 tests and runnable notebooks with real embeddings.", "body_md": "Most LlamaIndex setups end up with two separate backends once you go beyond plain vector search: a vector store for `VectorStoreIndex`\n\n, and a separate graph database for `PropertyGraphIndex`\n\nwhen you need relationship-aware retrieval (GraphRAG). Two services, two connection strings, two things to keep in sync.\n\nThis is a walkthrough of backing both index types with [SynapCores](https://synapcores.com) instead — one engine, one connection, both index types.\n\n```\ndocker run -d --name synapcores -p 8080:8080 \\\n  -e AIDB_ACCEPT_LICENSE=1 \\\n  -v synapcores-data:/var/lib/synapcores \\\n  ghcr.io/synapcores/community:latest\n\npip install llama-index llama-index-vector-stores-synapcores llama-index-graph-stores-synapcores\n```\n\nBoth integration packages are independently published on PyPI:\n\n``` python\nfrom llama_index.core import VectorStoreIndex, StorageContext, Document\nfrom llama_index.vector_stores.synapcores import SynapCoresVectorStore\n\nvector_store = SynapCoresVectorStore(uri=\"http://localhost:8080\", embedding_dim=1536)\nstorage_context = StorageContext.from_defaults(vector_store=vector_store)\n\ndocs = [Document(text=\"SynapCores runs vector search, graph traversal, and SQL in one engine.\")]\nindex = VectorStoreIndex.from_documents(docs, storage_context=storage_context)\n\nquery_engine = index.as_query_engine()\nresponse = query_engine.query(\"What does SynapCores combine into one engine?\")\nprint(response)\n```\n\nThe vector store implements the full `BasePydanticVectorStore`\n\nABC — `add`\n\n, `delete`\n\n, `query`\n\n, `delete_nodes`\n\n, `clear`\n\n, plus the async surface. Metadata filtering supports the full `MetadataFilters`\n\ngrammar: all 12 operators (`EQ`\n\n, `NE`\n\n, `GT`\n\n/`GTE`\n\n/`LT`\n\n/`LTE`\n\n, `IN`\n\n, `NIN`\n\n, `TEXT_MATCH`\n\n, `TEXT_MATCH_INSENSITIVE`\n\n, `CONTAINS`\n\n, `IS_EMPTY`\n\n) with `AND`\n\n/`OR`\n\n/`NOT`\n\nand nested groups — so you're not giving up filtering power by moving off a dedicated vector DB.\n\nIf you already have data in SynapCores from a previous run:\n\n```\nindex = VectorStoreIndex.from_vector_store(vector_store)\n```\n\nThis is the part that usually needs a second database. Not here:\n\n``` python\nfrom llama_index.core import PropertyGraphIndex\nfrom llama_index.graph_stores.synapcores import SynapCoresPropertyGraphStore\n\ngraph_store = SynapCoresPropertyGraphStore(uri=\"http://localhost:8080\")\n\ngraph_index = PropertyGraphIndex.from_documents(\n    docs,\n    property_graph_store=graph_store,\n)\n\nretriever = graph_index.as_retriever()\nnodes = retriever.retrieve(\"What connects to SynapCores?\")\n```\n\nThe graph store implements the full `PropertyGraphStore`\n\nABC with both `supports_structured_queries=True`\n\nand `supports_vector_queries=True`\n\n— including `get_rel_map(depth=N)`\n\n, the depth-bounded BFS primitive that `PropertyGraphIndex.as_retriever()`\n\nactually depends on under the hood. `structured_query()`\n\npasses Cypher straight through with named-parameter binding if you want to write graph queries by hand instead of relying on the auto-extracted schema.\n\nThe two index types above are hitting the *same* SynapCores instance, over the same connection — a vector table and a graph both living in one engine, not stitched together after the fact with a sync job. If you're prototyping GraphRAG and don't want to stand up Neo4j just to try it, or you want vector and graph retrieval to compose in a single query without cross-service joins, this is what that looks like end to end.\n\n48 tests against a live engine via docker-compose (23 vector + 25 graph), plus runnable notebooks with real HuggingFace MiniLM embeddings (384 dims):\n\nBoth packages are maintained independently of the LlamaIndex monorepo and published straight to PyPI, so `pip install`\n\nis all you need — no waiting on a docs PR to land anywhere.", "url": "https://wpnews.pro/news/using-synapcores-as-a-llamaindex-vector-store-property-graph-store", "canonical_source": "https://dev.to/synapcores/using-synapcores-as-a-llamaindex-vector-store-property-graph-store-47f7", "published_at": "2026-08-27 12:21:24+00:00", "updated_at": "2026-08-27 12:48:34.964179+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure", "machine-learning"], "entities": ["SynapCores", "LlamaIndex", "PyPI", "HuggingFace", "Neo4j"], "alternates": {"html": "https://wpnews.pro/news/using-synapcores-as-a-llamaindex-vector-store-property-graph-store", "markdown": "https://wpnews.pro/news/using-synapcores-as-a-llamaindex-vector-store-property-graph-store.md", "text": "https://wpnews.pro/news/using-synapcores-as-a-llamaindex-vector-store-property-graph-store.txt", "jsonld": "https://wpnews.pro/news/using-synapcores-as-a-llamaindex-vector-store-property-graph-store.jsonld"}}