问题描述
import Fuse from 'fuse.js';
import data from '../dal/data';
async function search(searchedData) {
// In case searched name is null
if (!searchedData) {
return [];
}
// load data
const dataload = await data();
// set options to filter data
const options = {
includeMatches: true,// Search in `name'
keys: ['name'],};
const fuse = new Fuse(dataload,options);
const matchedList = fuse.search(searchedData)
.map((element) => element.item);
return { matchedList };
}
export default search;
解决方法
Fuse.js 是基于传递给它的动态配置提供模糊搜索的库。有不同的库可用,例如 fuzzy-search。
现在,问题是如何根据评论模拟类似库作为模糊搜索。 This 是如何开始构建自己的模糊搜索引擎的一个很好的例子,但要做到这一点,您需要了解模糊搜索是什么以及它是如何工作的。
现在,如果您想了解 Fuse.js 如何处理任何模拟数据。我可以添加一些可能有助于您与现有项目集成的代码。
模拟数据
// it could be of any type,I am using Array of objects
const mockData = [{
name : 'Jason Durham',age : 28,address : 'Newyork city,New York,USA'
},{
name : 'Jameson Durham',address : 'Cleveland,Ohio,{
name : 'Tintan Groofs',address : 'Ohio city,USA'
}]
const options = {
includeScore: true,// the o/p will include the ranking based on weights
keys: [
{
name: 'name',weight: 0.3 // what weightage you want this key in your search result
},{
name: 'address',weight: 0.7 // what weightage you want this key in your search result
}
]
}
// Create a new instance of Fuse
const fuse = new Fuse(mockData,options)
// Now search for 'Man'
const result = fuse.search('nwyork');
console.log(result);
您可以查看 fuse.js 文档以了解如何进行搜索和配置。
您可以使用测试框架测试模糊搜索结果,前提是您知道预期值,但它会根据您的配置包含非常广泛的 o/p。到目前为止,Fuse.js 没有在他们的文档中提供直接的方法来检查它,但是你可以根据你获得的排名创建一个方法并为其创建一个阈值。这是我们使用 Fuse.js 测试搜索结果的方式,所有低于此阈值的结果都将被丢弃。