前言
在现代化的 Web 应用程序中,搜索功能已成为必不可少的工具,因此使用适当的算法来处理文本匹配的需求变得越来越普遍。@hypnosphi/fuse.js 是一个在 JavaScript 中实现的文本搜索库,它将一批对象(数组)与搜索字符串进行匹配。本文将介绍如何使用 @hypnosphi/fuse.js 实现强大的搜索功能。
安装
首先,需要在项目中安装 @hypnosphi/fuse.js。你可以在终端中键入以下命令:
npm install @hypnosphi/fuse.js
配置
有许多属性可以用来配置 @hypnosphi/fuse.js 搜索的行为。以下是一些常用的选项:
keys
keys
是用于设置要搜索的属性的数组。如果没有提供,则默认情况下 @hypnosphi/fuse.js
会搜索每个对象的所有属性:
const options = { threshold: 0.3, keys: ['title', 'author.fullName', 'abstract'] };
使用 keys
选项可以定制搜索的不同方面,这对于不同的搜索需求非常有用。
threshold
threshold
是搜索结果閾值的浮点数,范围从 0 到 1。较高的值导致更严格的搜索,更低的值导致更宽松的搜索。下面是一个使用 threshold
的示例:
const options = { threshold: 0.3 };
distance
distance
定义了用于比较两个字符串之间的距离的算法。默认算法是 Damerau-Levenshtein 距离,但你也可以选择其它算法:
const options = { distance: 100 };
tokenize
tokenize
是一个函数,用于将搜索字符串拆分为标记的数组,该数组作为搜索时要匹配的条目之一使用。默认情况下,tokenize
使用空格将搜索字符串拆分成单词:
const options = { tokenize: true };
如果你需要自定义标记化方法,可以提供一个函数。以下是一个示例:
const options = { tokenize: str => { return str.split('-'); } };
例子
以下是一个使用 @hypnosphi/fuse.js
的示例:
-- -------------------- ---- ------- ------ ---- ---- --------------------- ----- ----- - - - ------ ---- ----- -------- ------- - ---------- ---------- --------- ------------ -- --------- ---- ----- ------ -- - ----- ------- -- -------- ------ -- ----- ------------- ----- ----------- ---------- -- - ------ ---- ------- ----- -- ---------- ------- - ---------- ---------- --------- ------- -------- -- --------- ---- ------- ----- -- -------- -- - ----- -- --------- ------ ------- ------ ---------- ----- ----------- -------- --------- - -- ----- ---- - --- ----------- - ----- --------- ------------------- ------------------ ----------- -------- -------------- --------- ---- --- ----- ------ - -------------------------- -------------------- -- - - --------- -- ----- - ------ ---- ----- -------- ------- - ---------- ---------- --------- ------------ -- --------- ---- ----- ------ -- - ----- ------- -- -------- ------ -- ----- ------------- ----- ----------- ---------- -- -------- - - -------- ----- ----- ---- ------------------ ------ ------------- ----------- - - -- ------ ---- - - --
查询包含 Fitzgerald
的书籍。我们搜索字串 “Fitzgerald”,此时只有一本书可以匹配成功,它的 score 是 0.15。
结论
@hypnosphi/fuse.js 具有出色的性能,因为它使用 Levenshtein 距离算法进行模糊字符串搜索。在本文中,我们介绍了如何正确配置 @hypnosphi/fuse.js,以及如何使用它来执行文本搜索。包含完整用例的示例代码正在上面提供。现在你可以使用这个表示前端文本搜索解决方案的开源库来实现你的搜索需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055fc581e8991b448dd2d7