Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

37 Commits

Repository files navigation

quickmatch

Fast fuzzy string matching for Rust and JavaScript.

Built for autocomplete, command palettes, and search-as-you-type interfaces.

Crates.ionpmDocumentation

Install

# rust
cargo add quickmatch
# js
npm install quickmatch-js

Usage

Rust

use quickmatch::{QuickMatch,QuickMatchConfig};let items = vec!["file_name","file_size","created_at","updated_at"];let qm = QuickMatch::new(&items);
qm.matches("file name");// ["file_name", "file_size"]
qm.matches("filename");// ["file_name", "file_size"] (compound match)
qm.matches("filenme");// ["file_name", "file_size"] (trigram fuzzy)// Custom configlet config = QuickMatchConfig::new().with_limit(5).with_trigram_budget(10).with_separators(&['_','-',' ']);let qm = QuickMatch::new_with(&items, config);

JavaScript

import{QuickMatch,QuickMatchConfig}from"quickmatch-js";constitems=["file_name","file_size","created_at","updated_at"];constqm=newQuickMatch(items);qm.matches("file name");// ["file_name", "file_size"]qm.matches("filename");// ["file_name", "file_size"] (compound match)qm.matches("filenme");// ["file_name", "file_size"] (trigram fuzzy)// Custom configconstconfig=newQuickMatchConfig().withLimit(5).withTrigramBudget(10).withSeparators("_- ");constqm2=newQuickMatch(items,config);

How it works

Queries go through three matching stages:

  1. Word match — query is split by separators and looked up in a word index
  2. Compound match — adjacent words are indexed as compounds, so hashrate finds hash_rate
  3. Trigram fallback — unknown words are matched via character trigrams for fuzzy/typo tolerance

Results are ranked by prefix score (exact > prefix > unordered), then by trigram score, then by length.

Config

All options are documented in the QuickMatchConfig source. Builder methods:

RustJSDefault
with_limit(n)withLimit(n)100
with_trigram_budget(n)withTrigramBudget(n)6
with_min_score(n)withMinScore(n)2
with_separators(&[..])withSeparators(s)_- :/

Performance

Benchmarked against ~5,000 metric names, 83 queries, averaged over 10K iterations:

Avg/queryBuild time
Rust~26 us~40 ms
JS~29 us~30 ms

License

MIT

About

Lightning-fast fuzzy string matching with hybrid word and trigram indexing

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages