快速模糊搜索利器——fast-fuzzy
项目介绍
快速而轻量级的模糊搜索工具——fast-fuzzy,它是一种精巧的JavaScript库,能够帮助你在大量的数据中实现快速、高效的模糊查找。这个库采用了Peter H. Sellers提出的改进版Levenshtein距离算法,并结合了Damerau-Levenshtein距离算法,以提供更灵活和准确的匹配效果。
项目技术分析
fast-fuzzy的核心是基于一个名为Trie的数据结构,这是一种高效存储字符串前缀信息的结构。在进行模糊搜索时,首先对输入进行标准化处理,包括UTF8标准化、可选的大小写转换、非字母字符移除以及空格规范化。接着,使用Sellers子串匹配方法和Damerau-Levenshtein距离算法计算相似度得分,使得结果排序更加精确。
库提供了几个核心功能:
fuzzy
:用于单个字符串与候选字符串之间的模糊度评分。search
:一次性的搜索操作,返回按分数降序排列的匹配结果列表。Searcher
:适用于多次搜索同一组候选字符串的情况,通过构建并缓存Trie来优化性能。
项目及技术应用场景
fast-fuzzy广泛应用于各种需要模糊搜索的情境,例如:
- 实时搜索建议:当用户在文本框中输入时,为他们提供可能的搜索建议。
- 数据库查询:对大量数据库记录进行快速过滤。
- 代码补全:在编程环境中提供代码提示和自动完成。
- 智能导航:在目录树或文件系统中快速定位目标。
项目特点
- 速度极快:利用Trie数据结构避免冗余计算,提高搜索效率。
- 自定义选项丰富:支持调整阈值、忽略大小写、忽略符号等,满足不同需求。
- 适应性强:可以处理多语言字符,如Unicode图形字符,以及支持数组形式的键值搜索。
- 返回详细信息:除了返回匹配项外,还可以提供原始值、得分等匹配详细信息。
- 实时更新:使用
Searcher
类可以轻松添加新候选人并更新搜索结果。
示例代码:
const { search, Searcher } = require('fast-fuzzy');
// 单次模糊搜索
search('abc', ['def', 'bcd', 'cde', 'abc']); // 返回 ['abc', 'bcd']
// 对象数组的模糊搜索
search('abc', [
{ name: 'def' },
{ name: 'bcd' },
{ name: 'cde' },
{ name: 'abc' },
], {
keySelector: (obj) => obj.name,
}); // 返回 [{ name: 'abc' }, { name: 'bcd' }]
// 使用Searcher实例
const searcher = new Searcher(['def', 'bcd', 'cde', 'abc']);
searcher.search('abc'); // 返回 ['abc', 'bcd']
fast-fuzzy是一个强大的模糊搜索解决方案,它的灵活性和高性能使其成为任何需要模糊搜索功能的项目中的理想选择。立即尝试一下,让您的应用程序拥有更出色的用户体验吧!