Indexing & Fuzzy Name Matching · Common mistakes
2 min readRapid overview
Common mistakes
- Assuming a B-tree can be made to do fuzzy matching with enough cleverness in the predicate. It cannot; the limitation is structural, and
LIKE '%x%'is a scan wearing an index's clothes. - Treating a phonetic code as a verdict. Soundex compresses names into four characters; collision is a retrieval hint, never a decision.
- Blocking on a single key. One pass means one way to be silently missed. Union several independent passes.
- Applying Jaro-Winkler to identifiers. The prefix bonus manufactures similarity between
ACC-2024-0001andACC-2024-9999. - Skipping rarity weighting, then wondering why every
Mohammedmatches every otherMohammed. - Reaching for embeddings because the problem is called "fuzzy matching". Names have no semantics; the model discards exactly the surface signal you need.
- Listing a column store as a search-tier option. Different question shape, not a cheaper alternative.
- Rejecting a search engine as unexplainable without checking the Explain API, which returns the full per-document score breakdown.
- Any fixed candidate budget with no truncation metric and no scheduled recall measurement.
- Any threshold applied in two places where one of them uses an engine default.
- Enabling a "defer the write" setting without asking which thread eventually performs the deferred work. GIN
fastupdatecan hand the pending-list flush to an arbitrary customer query. - Expiring data with a mass
DELETEon a large indexed table, then discovering that the tombstones bloat the index and the vacuum competes with the read path. - Inventing a number to close an evidential gap in a design record. An unlabelled estimate is indistinguishable from a measurement once it has been quoted twice.
- Writing "revisit later" instead of naming the event that will make the missing evidence available. A gate fires; a deferral never does.