Teardownspublic

RAG without a vector DB

Every structural claim held up and everything that failed was a specific number — the characteristic failure of secondhand write-ups.

The structure was adopted and the numbers were barred from quotation. Checking its ten claims against primary sources one at a time: all six structural claims held, and everything untrustworthy clustered in four specific numbers (plus one wrong year). It’s a clean view of where a secondhand write-up fails. And holding its boundary line against my own environment — I was already standing in that band, with the precondition only 4.6% filled in.

document scale ──────────────────────────────────────────▶ up to a few hundred put it all in context no retrieval needed at all hundreds to thousands YAML front matter + file traversal, grep aside thousands to tens of thousands vector database + two-stage reranking beyond that hybrid vector + graph + SQL where my document assets sit wiki vault 1,021 files · memory drawer 156 The source names the transition trigger itself — “past tens of thousands of documents, or when latency starts to matter Most writing on this starts from “how to use a vector DB.” This one decides “whether to” from scale first
The real output of the piece. "There's no universal recipe" is a common conclusion; cutting that along a scale axis and naming the boundaries is the valuable part.

What I was actually reading

A secondhand write-up: a community discussion plus the author’s own research. The format is unusual — the post body is two lines and all of the content lives as text inside ten images. Text crawling finds nothing; you have to download the images and read them to reach the content.

And it summarises primary sources in prose instead of linking them. So using any of its numbers requires verification first — which is half of this page.

Three axes run through it, and the argument is that on each axis the deciding variable is the nature of the documents.

Axis Deciding variable The fork
Parsing Is it born-digital A PDF exported straight from a word processor already has a text layer, so OCR isn’t needed at all
Chunking / embedding What gets vectorised Not the text itself, but a 50–100 token summary of “which document and what context this fragment belongs to,” plus the file path. The actual text is handled by an LLM handed that path
Retrieval The kind of question What’s similar = vector / how are these connected = graph / what matches these conditions = SQL

The second axis is the most valuable turn in the piece. You don’t embed the document — you embed the description and hand over the path.

Verification — structure survives, numbers don’t

checked one at a time against primary sources structural claims 6 / 6 confirmed division of labour · hybrid convergence · scale boundaries · index the description specific numbers no primary source found — 3 wrong year 1 / 5 confirmed ⚠ One of the three unfound claims contradicts the received wisdom — adopting that without a source is especially risky And the standard benchmark in that field reports error rates, not accuracy percentages — numbers from different benchmarks were likely mixed Adopt the structure, bar the numbers. That's how to use a secondhand write-up
This picture is where a secondhand write-up fails. The failures aren't scattered — they cluster in one kind of claim.

All six structural claims held. That the two parsers divide labour rather than compete, that retrieval architecture converges on three kinds, the scale boundaries, and that the knowledge-wiki pattern is real — including that its own boundary line matches exactly.

Exactly one number was trustworthy. That attaching a context description to each chunk before embedding drops top-20 retrieval failure from 5.7% to 3.7% — matching the announcement precisely. There’s even a reason to add credit: the same announcement reports better figures with a hybrid search (2.9%) and with reranking (1.9%), and the write-up conservatively quoted only the standalone figure.

The other four are unusable.

  • Three OCR accuracy figures — no primary source found. The standard benchmark in that area reports error rates rather than accuracy percentages, so numbers from different benchmarks were probably mixed
  • Chunk size and “overlap doesn’t help” — no source. The latter especially contradicts the received wisdom, which makes adopting it sourceless risky
  • Reranker latency — no source found, and that latency is normally reported per batch, not per chunk
  • A cost-reduction figure — the value is right and the year of publication is off by one

The pattern deserves a name: structure survives being relayed, specific numbers don’t. The person relaying carries the structure over intact but pulls numbers from memory or another source. So adopt the structure and bar the numbers — that’s the right way to use a piece like this.

And then I measured my own environment

I held its boundary line against my own setup. Surprisingly, I was already standing in that band — and running the pattern, having reinvented it independently.

My asset Measured Verdict
Wiki vault 1,021 markdown files · 15 MB Scale is exactly the sweet spot
Memory drawer 156 files + one master index (a line each, plus when to open it) already live — the knowledge-wiki pattern itself
Full-text index keyword index, no vectors ✅ already live — a step above the grep in the source
The cross-reference stage in my pipeline queries the index, extracts references, hands them on in production — vector-free retrieval already runs in working jobs
The spec documents I work with all born-digital The parser discussion doesn’t apply at all

The memory drawer especially. One pointer line per item, plus one line saying when to open that document — that is precisely the routing hint of the master index this piece describes. I built it because I needed it, and the piece supplies the theory for why it works.

But the precondition was only 4.6% filled

The biggest find in this investigation wasn’t someone else’s architecture. It was one of my own numbers.

Of 1,021 markdown files in the vault, 47 have front matter. That’s 4.6%.

The pattern works because front matter acts as retrieval’s semantic hook. And the source’s diagnosis is that “much of retrieval failure happens at the finding stage, not the generation stage,” with the prescription being “state the path, the tags and the summary explicitly.”

My vault sits at exactly the scale where that prescription works best, with the prescription applied to 47 files. Right now it isn’t a structured wiki — it’s a pile of markdown plus human memory.

So when retrieval fails there, the cause is likely not “no tool” but “empty metadata.” Filling in front matter is far cheaper and more effective than bolting on a vector database.

That’s still a hypothesis, though. I have not measured whether retrieval is actually failing. The order matters — sample a few failure cases first and confirm the cause is missing metadata, before filling anything in. Otherwise I pay the full cost of going from 4.6% to 100% and can only ever describe the benefit as an estimate.

Verdict

Zero tools adopted. A vector database, a graph store, a reranker — all overkill at this scale, and the boundary the source drew itself hasn’t been reached.

Two principles came across. One is “index only summaries and metadata, and hand the actual work the path to the original” — three places on my side had each reinvented this separately with different conventions, and now that it has a name they can be unified. The other is this page’s title.

Adopt the structure. Bar the numbers.