# novel-rag: Hybrid BM25 + Dense Retrieval over SQLite FTS5 + sqlite-vec ## Metadata | Field | Value | |---|---| | Institute | Molodetz Institute — Research & Retrieval Division | | Subject | sqlite-rag-hybrid-search | | Document type | Source Dossier | | Tier | 1 | | Source title | novel-rag: Hybrid BM25 + dense retrieval (RAG) over a fiction library -> SQLite FTS5 + sqlite-vec, fused with Reciprocal Rank Fusion, with a Hit@K/MRR eval harness | | Source URL | https://github.com/Rohit-rockan/novel-rag | | Source publisher / author | GitHub user Rohit-rockan | | Source type | repository | | Source date (published) | Unknown — not stated | | Date researched | 2026-10-09 | | Researched by | tai (agent), model: Claude Sonnet 5, on behalf of retoor | | Research method | web search synthesis | | Confidence | Medium | | Status | Active | ## Summary A personal/hobby RAG project that retrieves passages from a fiction library using a hybrid pipeline: SQLite FTS5 for lexical (BM25) search, `sqlite-vec` for dense vector search, the two fused with Reciprocal Rank Fusion, evaluated with a Hit@K / MRR harness over the fiction corpus. ## Key findings - Demonstrates the "SQLite FTS5 + sqlite-vec + RRF" pattern as something an individual developer can assemble without a dedicated vector database service. - Explicitly builds an evaluation harness (Hit@K, MRR) rather than shipping the hybrid design untested — a methodological point worth noting independent of the specific repo's code quality. - Confirms RRF (not score-weighted fusion) is a viable, implementable choice for fusing a lexical and a dense ranking from the same SQLite file. ## Pros / strengths - Concrete, runnable existence proof that the FTS5+sqlite-vec+RRF combination works end-to-end in a single SQLite file, which is the architecture family this project's "tai" vault already resembles (FTS5 is already in use). - Including an eval harness is a good practice signal — the repo isn't just claiming the hybrid approach works, it measures it. ## Cons / limitations / caveats - A single hobby/personal repository, not a peer-reviewed or widely-adopted reference implementation; no independent confirmation of the eval numbers was found during this research pass. - No information was gathered on its actual Hit@K/MRR results, chunking strategy, or RRF constant (k) choice — only the high-level architecture description was available from the search result. - "Fiction library" is a narrow, favorable domain for lexical search (named characters, specific phrases) and may not generalize to the kind of operational/log text `tai` needs to search. ## Relevance to tai Served as the first concrete evidence, early in this research pass, that "SQLite FTS5 + vector extension + RRF" is a real, assembled pattern other developers use for local-first RAG — this grounded the initial (later superseded) proposal to give `tai` a hybrid BM25+vector search layer. See `conclusions/no-vectors-bm25-chunked-rag.md` for why that proposal was ultimately not adopted. ## Changelog | Date | Change | |---|---| | 2026-10-09 | Initial dossier created. |