如何在模糊搜索中对项目进行加权

时间:2017-10-02 18:18:40

标签: javascript ranking fuzzy-search fuse.js

使用Fuse.js,我需要对单个项目进行加权,以便在搜索结果中获得更好的排名。例如,我如何确保" Paris France"在巴黎""巴黎"查询下面的数据?

places = [{
  name: 'Paris, France'
  weigth: 10
},{
  name: 'Paris, Ontario'
  weigth: 2
},
{
  name: 'Paris, Texas'
  weigth: 1
}]

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>