How Indx handles typos and fuzzy queries
Pattern matching gives you typo tolerance out of the box, with no synonym lists or distance tuning to maintain.
Real users do not type clean queries. They misspell, mash words together, swap letters, and search on a phone with autocorrect fighting them. Most search engines need synonym dictionaries and fuzzy distance settings to cope. Indx handles it natively, because every search runs in two phases built for imperfect input.
A search for "wirless hedphones" should still find the wireless headphones. With Indx, it does.
N-gram vectors, not edit distance
Classic fuzzy search bolts an allowance onto exact matching: each query word is expanded to variants within a Levenshtein edit distance, typically capped at one or two edits. The cap is a cliff: one typo too many and the match is gone. Raising it gets expensive fast.
Indx scores patterns instead. Unlike most engines, it does not index full words at all, only overlapping character n-grams of different lengths. Documents and queries are compared as vectors of those patterns, weighted with BM25. A typo removes a few n-grams from the overlap rather than breaking a whole token, so the score degrades gradually with the damage instead of dropping to zero. There is no edit-distance threshold to set and no list of common misspellings to keep up to date.
A second phase, coverage, then re-evaluates the top candidates for exact and near-exact token matches, rescores the confirmed ones on a 16-bit scale, and promotes them. This is the only place an edit-distance check appears. It confirms near-exact words among candidates the pattern phase already found, and never decides what gets retrieved. The result: "wirle hedphones" finds "Wireless Headphones" because the n-gram phase catches it despite the typos, and coverage confirms the near-exact match.
Split and joined words
Compound terms are a classic search failure. "USB C", "USB-C", and "USBC" should all find the same product. Coverage has dedicated detection for joined and split words, alongside whole words, fuzzy words, prefixes, and suffixes. All of it is on by default, so you do not have to normalize your data first.
Honest results, even when garbled
A heavily garbled query still returns ranked results, because the pattern phase finds candidates even when coverage cannot confirm an exact match. You get useful results instead of a dead-end "no results" page, and the score tells you how confident the match is.
Fast, even when forgiving
Forgiving matching usually costs performance. The two-phase model is what avoids that: the vector relevancy phase runs across the whole dataset in microseconds, and the computationally expensive coverage checks only run on the top candidates it hands over, never the full dataset. An optimized Indx search over tens of thousands of documents typically answers in under a millisecond, so there is no need to debounce search-as-you-type. Fire a query on every keystroke.
Try it
Throw a few deliberately messy queries at your dataset and watch the right results come back.
More articles
A skill, agent-readable docs, and a built-in MCP server. Describe what you want searchable, and your agent does the rest.
A faster search engine and a redesigned cloud platform, now in beta. See what is changing and how to try the preview.