Plain vector search returns the five nearest chunks and stops. Here a match can be expanded along the relationships stored in Neo4j, so the answer arrives with the neighbouring material that explains it.
A retrieval server over a pair of databases: Qdrant holds the embeddings, Neo4j holds the relationships between documents. A search can be pure semantic similarity, or hybrid - similarity first, then expanded along the graph.
- Semantic search over document embeddings held in Qdrant
- Hybrid retrieval combining vector similarity with the graph relationships around each match
- Context expansion through Neo4j, so a result arrives with what it connects to rather than alone
- The Neo4j schema and the Qdrant collection documented, so what is being searched is inspectable
Python 3.12 or newer, Neo4j and Qdrant reachable locally, both configured in a .env - and, the part that takes the time, your documents already indexed into both. The companion repository covers building that hybrid database; without the indexing step this server has nothing to search.
