Fuse.js–用于JavaScript中数据的模糊搜索

介绍

Fuse.js是一个功能强大、轻量级的模糊搜索库,没有依赖关系。一般来说,模糊搜索(更正式地称为近似字符串匹配)是一种寻找近似等于给定模式(而不是精确地)的字符串的技术。


Fuse.js——用于JavaScript中数据的模糊搜索

Github

https://github.com/krisk/fuse

使用场景

当你需要对小到中等大小的数据集进行客户端模糊搜索时。

基本使用

// 1. 要搜索的数据列表
const books = [
  {
    title: "Old Man\'s War",
    author: {
      firstName: \'John\',
      lastName: \'Scalzi\'
    }
  },
  {
    title: \'The Lock Artist\',
    author: {
      firstName: \'Steve\',
      lastName: \'Hamilton\'
    }
  }
]

// 2. 设置fuse实例
const fuse = new Fuse(books, {
  keys: [\'title\', \'author.firstName\']
})

// 3. 搜索!
fuse.search(\'jon\')

// 输出:
// [
//   {
//     item: {
//       title: "Old Man\'s War",
//       author: {
//         firstName: \'John\',
//         lastName: \'Scalzi\'
//       }
//     },
//     refIndex: 0
//   }
// ]

安装

  • NPM
npm install --save fuse.js
  • Yarn
yarn add fuse.js
  • 引入

ES6模块

import Fuse from \'fuse.js\'

CommonJS:

const Fuse = require(\'fuse.js\')

使用范例

  • 字符串数组搜索
["Old Man\'s War", "The Lock Artist"]

const options = {
  includeScore: true
}

const fuse = new Fuse(list, options)

const result = fuse.search(\'od man\')
  • 对象数组搜索
[
  {
    "title": "Old Man\'s War",
    "author": "John Scalzi",
    "tags": ["fiction"]
  },
  {
    "title": "The Lock Artist",
    "author": "Steve",
    "tags": ["thriller"]
  }
]
const options = {
  includeScore: true,
  // 在数组中搜索author` and in `tags`两个字段
  keys: [\'author\', \'tags\']
}

const fuse = new Fuse(list, options)

const result = fuse.search(\'tion\')
  • 嵌套搜索
[
  {
    "title": "Old Man\'s War",
    "author": {
      "name": "John Scalzi",
      "tags": [
        {
          "value": "American"
        }
      ]
    }
  },
  {
    "title": "The Lock Artist",
    "author": {
      "name": "Steve Hamilton",
      "tags": [
        {
          "value": "English"
        }
      ]
    }
  }
]
const options = {
  includeScore: true,
  // //等价于“keys:[[\'author\',\'tags\',\'value\']]
  keys: [\'author.tags.value\']
}

const fuse = new Fuse(list, options)

const result = fuse.search(\'engsh\')
  • 加权检索
[
  {
    "title": "Old Man\'s War fiction",
    "author": "John X",
    "tags": ["war"]
  },
  {
    "title": "Right Ho Jeeves",
    "author": "P.D. Mans",
    "tags": ["fiction", "war"]
  }
]

const options = {
  includeScore: true,
  keys: [
    {
      name: \'title\',
      weight: 0.3
    },
    {
      name: \'author\',
      weight: 0.7
    }
  ]
}

// 创建Fuse的新实例
const fuse = new Fuse(books, options)

const result = fuse.search(\'Man\')
  • 默认权重

如果未提供权重,则默认为1。在下面的示例中,author的权重为2,但title的权重为1。

const fuse = new Fuse(books, {
  keys: [
    \'title\', // 将分配“权重”1
    {
      name: \'author\',
      weight: 2
    }
  ]
})
  • 扩展搜索

这其中包括一些特殊符号进行的搜索方式,详情可看文档

总结

Fuse.js为我们在客户端提供了很方便的数据匹配方式,相较于手动去处理这些数据。Fuse显得更加方便!

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/share/19148.html

发表评论

登录后才能评论