使用Fuse.js,我需要对单个项目进行加权,以便在搜索结果中获得更好的排名。例如,我如何确保" Paris France"在巴黎""巴黎"查询下面的数据?
places = [{
name: 'Paris, France'
weigth: 10
},{
name: 'Paris, Ontario'
weigth: 2
},
{
name: 'Paris, Texas'
weigth: 1
}]
答案 0 :(得分:0)
据我所知,Fuse.js中没有内置的方法来执行此操作。 weight
属性应用于正在搜索的属性(在options
对象中),而不是应用于正在搜索的对象(如示例here中所示)。
我可能建议您编写一个函数来自行排序。因此,一旦您获得结果数组,搜索后,请自行执行Array.sort()
(文档here)。
例如......
//Your places object
var places = [
{
name: 'Paris, Texas',
weight: 2
},
{
name: 'Paris, France',
weight: 10
},
{
name: 'Paris, Texas',
weight: 1
}
];
//Your search options
var options = {
keys: [
"name"
]
};
var fuse = new Fuse(places, options); // "list" is the item array
var result = fuse.search("Paris");
//Once you have got this result, perform your own sort on it:
result.sort(function(a, b) {
return b.weight - a.weight;
});
console.log('Your sorted results:');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.1.0/fuse.min.js"></script>