Indexing & Fuzzy Name Matching · Common mistakes

2 min read
Senior22 min read
Rapid 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-0001 and ACC-2024-9999.
  • Skipping rarity weighting, then wondering why every Mohammed matches every other Mohammed.
  • 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 fastupdate can hand the pending-list flush to an arbitrary customer query.
  • Expiring data with a mass DELETE on 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.

See also