Fuse.js

2024-07-01 09:29:02 178
Fuse.js 是一个轻量级的模糊搜索库,专为 JavaScript 应用设计。它允许在大量数据中快速查找匹配项,特别适用于需要高性能、易用和灵活的搜索功能的应用。

特点

  • 轻量级:体积小,适合在浏览器端和 Node.js 环境中使用。
  • 模糊搜索:支持模糊匹配,即使查询词拼写错误或不完全也能找到相关结果。
  • 多字段搜索:可以在多个字段中进行搜索,提高搜索结果的准确性。
  • 高性能:优化的算法能够在大数据集上快速运行。
  • 易于集成:简单易用的 API,便于快速集成到任何项目中。

使用场景

  • 电商网站:提供模糊商品搜索功能,帮助用户快速找到想要的产品。
  • 内容管理系统:在大量文章、博客或文档中快速查找相关内容。
  • 社交媒体应用:帮助用户在海量用户和帖子中找到特定内容或用户。
  • 数据分析工具:在数据集中快速定位特定条目。

安装方式

使用 npm 或 yarn 安装:

npm install fuse.js

yarn add fuse.js

使用示例

import Fuse from 'fuse.js';

const list = [
  { title: "Old Man's War", author: "John Scalzi" },
  { title: "The Lock Artist", author: "Steve Hamilton" },
];

const options = {
  keys: ['title', 'author'],
};

const fuse = new Fuse(list, options);
const result = fuse.search('Old Man');
console.log(result);

常用 API 介绍

  • Fuse 构造函数:创建一个新的 Fuse 实例。

    const fuse = new Fuse(list, options);
    
    • list:搜索的数据列表。
    • options:配置选项,用于定义搜索行为。
  • search:执行搜索,返回匹配结果。

    const result = fuse.search('search term');
    
    • search term:查询字符串,可以是完整词或部分词。
  • setCollection:更新数据列表。

    fuse.setCollection(newList);
    
    • newList:新的数据列表。
  • add:向现有数据列表中添加新的条目。

    fuse.add(newItem);
    
    • newItem:新的数据条目。
  • remove:移除特定的条目。

    fuse.remove(item => item.title === 'title to remove');
    
    • predicate:用于查找要移除条目的条件函数。

高级用法

Fuse.js 提供了许多高级配置选项,可以更细粒度地控制搜索行为,例如设置阈值、指定不同字段的权重、启用/禁用位置敏感性等。

配置选项示例

const options = {
  isCaseSensitive: false, // 大小写敏感
  includeScore: true, // 包含匹配得分
  shouldSort: true, // 按得分排序
  includeMatches: true, // 包含匹配详情
  findAllMatches: false, // 查找所有匹配项
  minMatchCharLength: 2, // 最小匹配字符长度
  keys: [
    {
      name: 'title',
      weight: 0.7, // 权重
    },
    {
      name: 'author',
      weight: 0.3,
    },
  ],
};

官方资料