如何设置fuse.js选项

时间:2018-08-28 15:33:09

标签: javascript fuzzy-search fuse.js

const JSON = [
  {
    "name": "01,02"
  },
  {
    "name": "01"
  },
  {
    "name": "05"
  },
  {
    "name": "06,09"
  },
  {
    "name": "04,05"
  },
  {
    "name": "02,03"
  },
  {
    "name": "02,04,05"
  },
  {
    "name": "01,02"
  },
  {
    "name": "01,03"
  }
]


function foo (str) {
  const options = {
    keys: ['name'],
    threshold: 0,
    location: 0,
    distance: 100,
    minMatchCharLength: str.length
  }
  const _fuse = new Fuse(JSON, options)
  console.log(_fuse.search(str))
}

foo('03')
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.1/fuse.min.js"></script>

我正在尝试使用fuse.js进行过滤。我不确定如何使用这些选项。如果我使用03搜索,则不会返回任何结果。我尝试更改位置和阈值,但没有完全了解它。我将minMatchCharLength设置为查询字符串的长度,认为这将阻止对01的查询返回仅包含0的项目。正确吗?

2 个答案:

答案 0 :(得分:1)

您的代码已经可以了。 您将阈值设置为0,这意味着

fuse requires a perfct match (of both letters and location)

并且没有name属性恰好是03

因此,如果您仅修饰阈值并将其设置为0.2-例如,您将从搜索中获得一些结果:

[{name: "02,03"}, {name: "01,03"}]

答案 1 :(得分:0)

尝试将"name"更改为name

const JSON =  [
  {
    name: "01,02"
  },
  {
    name: "01"
  },
  {
    name: "05"
  },
  {
    name: "06,09"
  },
  {
    name: "04,05"
  },
  {
    name: "02,03"
  },
  {
    name: "02,04,05"
  },
  {
    name: "01,02"
  },
  {
    name: "01,03"
  }
];

在这里您可以找到一个演示,可让您“玩”配置。 您可以粘贴json并尝试获得不同的结果: Link

有关配置的更多信息,您可以参考上一个链接的步骤2,其中介绍了所有选项。 例如:阈值:匹配算法在什么时候放弃。阈值0.0需要一个完美的匹配(字母和位置都可以),阈值1.0可以匹配所有内容

以下是带有您的示例的演示:jsfiddle