Documents two-stage RRF, configuration options, and notes potential vector search noise improvements for future reference. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.4 KiB
HybridRAG Architecture
Overview
HybridRAG combines three search sources to provide comprehensive results:
- Vector search (Qdrant) - Semantic similarity via embeddings
- Graph search (Neo4j) - Entity relationships in knowledge graph
- Web search (SearXNG) - External web results via Trafilatura extraction
Two-Stage RRF Fusion (v1.3.0+)
To ensure fair ranking between wiki and web results, we use a two-stage Reciprocal Rank Fusion:
Stage 1: Wiki Merge
vector results ─┬─→ Mini-RRF ─→ Unified wiki ranking
graph results ─┘
Stage 2: Final RRF
wiki (merged) ─┬─→ Final RRF ─→ Combined results
web results ─┘
Why two stages?
Previously, wiki pages found by BOTH vector and graph received double RRF contribution, giving them an unfair 2x advantage over web results. The two-stage approach:
- Merges vector+graph into a single "wiki" source
- Wiki's internal ranking still benefits from multi-source confirmation
- Wiki and web compete as equals in final ranking
Configuration
| Setting | Default | Description |
|---|---|---|
VECTOR_SIMILARITY_THRESHOLD |
0.7 | Minimum similarity score for vector results |
HYBRID_RAG_VECTOR_LIMIT |
10 | Max vector results |
HYBRID_RAG_GRAPH_LIMIT |
10 | Max graph results |
HYBRID_RAG_WEB_LIMIT |
5 | Max web results |
Known Limitations & Future Improvements
Vector Search Noise
Status: Open for improvement if needed after observation period.
Vector search may return generic category/index pages (e.g., "Reference", "Projects", "Places") with high similarity scores (~0.86). These pages often have similar boilerplate content leading to uniform scores.
Potential solutions if this becomes problematic:
- Raise threshold - Increase
VECTOR_SIMILARITY_THRESHOLDto 0.85+ - Page-type filtering - Exclude pages tagged as category/index/stub
- Content length signal - Penalize pages with minimal content
- Duplicate score detection - Flag results with suspiciously identical scores
The LLM re-ranking phase typically demotes these low-quality results, so this may not require immediate action.
Graph Search
Graph search uses only core keywords (no LLM-generated synonyms) to avoid false matches like "author" → "author2000". This is intentional - vector search handles semantic similarity via embeddings.