Skip to content

参考

Fuse.js 构造方式、全部选项与默认值、实例方法、静态 API、结果结构、扩展/逻辑搜索语法 速查。版本基线 Fuse.js 7.x(7.4.2)。默认值取自源码 Config

一、构造与查询

写法用途
new Fuse(list, options?)创建实例(list 为字符串/对象数组)
new Fuse(list, options, index)传入预建索引(第三参)
fuse.search(pattern)查询,返回结果数组
fuse.search(pattern, { limit })限制返回条数
fuse.search(expression)逻辑搜索(传 $and/$or 对象)
js
import Fuse from "fuse.js"
const fuse = new Fuse(books, { keys: ["title", "author"] })
fuse.search("jon")

二、基础选项

选项默认说明
keys[]要搜索的字段(对象数组必填;字符串数组不需要)
isCaseSensitivefalse是否区分大小写
ignoreDiacriticsfalse是否忽略变音符号(cafécafe
includeScorefalse结果是否含 score
includeMatchesfalse结果是否含 matches(高亮区间)
minMatchCharLength1只纳入长度超过该值的匹配片段
shouldSorttrue是否按 score 排序
findAllMatchesfalse完美匹配后是否继续扫完收集全部片段

三、模糊匹配选项

选项默认说明
threshold0.6score 上限闸门,越小越严格(0=完美,1=匹配一切)
location0期望匹配出现的大致位置
distance100匹配离 location 多远可接受;越大位置惩罚越轻
ignoreLocationfalsetrue 则忽略 location/distance,任意位置可匹配

默认位置窗口 ≈ threshold × distance0.6×100=60 字符)。长文本靠后匹配不上 → 开 ignoreLocation

四、高级选项

选项默认说明
useExtendedSearchfalse启用 unix 风格扩展搜索语法
getFn内置取值自定义按路径从对象取值(可做转换)
sortFn内置自定义结果排序(需 shouldSort: true
ignoreFieldNormfalsetrue 则 score 忽略字段长度归一
fieldNormWeight1字段长度归一的影响力(越大越强调短字段命中)

五、keys 三种写法

js
keys: [
  "title", // 顶层字段
  "author.firstName", // 嵌套:点号路径
  ["author", "first.name"], // 嵌套:数组路径(键名含字面点号时必用)
  ["tags", "value"], // 数组内对象字段
  { name: "title", weight: 0.7 }, // 加权(未指定 weight 默认 1)
]

六、实例方法

方法用途
search(pattern, opts?)查询;返回结果数组(无匹配为 []
add(doc)新增一条并更新索引
remove(predicate)按谓词删除,返回被删项数组
removeAt(idx)按下标删除,返回被删项
setCollection(docs, index?)整体替换集合
getIndex()取内部索引对象

七、静态 API

成员用途
Fuse.createIndex(keys, list)预建索引(传给 new Fuse 第三参)
Fuse.parseIndex(json)把序列化的索引还原为索引对象
index.toJSON()序列化索引(配合 parseIndex)
Fuse.version版本号

八、结果结构

js
{
  item,        // 命中的原始数据项
  refIndex,    // 在原始 list 中的下标
  score,       // 0 完美 ~ 1 不匹配(需 includeScore)
  matches: [   // 需 includeMatches
    {
      indices, // 命中的 [start,end] 闭区间数组,如 [[4,9]]
      value,   // 被命中的原文
      key,     // 命中的字段名(多字段时)
    },
  ],
}

⚠️ score0 最匹配、1 最不匹配,越小越相关indices闭区间,切片取到 end + 1

九、扩展搜索语法(需 useExtendedSearch)

写法含义
jscript模糊匹配
=scheme精确相等
'python包含匹配
!ruby不包含(排除)
^java / !^java前缀 / 反前缀
.js$ / !.js$后缀 / 反后缀
空格 / |AND(都满足)/ OR(任一组满足)

十、逻辑搜索

js
fuse.search({ $and: [{ author: "abc" }, { title: "xyz" }] })
fuse.search({ $or: [{ author: "abc" }, { author: "def" }] })
// 键名含字面点号:
fuse.search({ $and: [{ $path: ["author", "first.name"], $val: "jon" }] })

十一、构建产物

产物体积(min+gzip)
完整版(fuse.mjs / fuse.cjs约 8.6 KB全部特性
basic 版(fuse.basic.min.mjs约 6.8 KB仅核心模糊搜索
worker 版(fuse.worker.mjs配合 Web Worker

API 查完,回 指南 · 基础 看 keys 与调参,或 指南 · 专家 看算法与工程化。