Typeahead / Bloodhound:从本地删除重复项

时间:2015-10-28 17:39:38

标签: typeahead.js twitter-typeahead bloodhound

我不清楚如何使用Bloodhound中的dupDetector参数删除重复项。

我正在使用v.1.11.1

从包含以下记录的数据库中提取数据集:

building_name  room  department
Rooney         123   English
Rooney         456   Chemistry
Rooney         987   Chemistry
Meyer          65    Dog Walking
Flatiron       498   Weaving

My Bloodhound电话:

var buildingName = new Bloodhound({
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name', 'room', 'department'),
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      local: buildingJson,
      dupDetector: function(remoteMatch, localMatch) {
        return remoteMatch.building_name === localMatch.building_name;
      }
});

我正在寻找的功能是能够搜索鲁尼,456或英语,结果集只显示一个building_name,因为所有三个结果的建筑物名称相同。目前,它将返回列表中的所有三个记录。

这可能吗?

我能找到的关于dupDetector的所有信息都是比较远程和预取。我只使用一个数据源,它只有多个具有相同名称的记录。

1 个答案:

答案 0 :(得分:0)

不幸的是,dupDetector仅适用于远程或预取的数据源。

本地数据源存在问题,因此dupDetector无法正常工作。永远不会被召唤。尝试使用console.log查看此内容。

https://github.com/twitter/typeahead.js/issues/606#issuecomment-51221195

看起来你无论如何都要从JSON加载,所以为什么不把它放在你的本地"服务器和"预取"相反。否则看起来你必须手动完成。

var buildingName = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name', 'room', 'department'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: ../buildingJson.json,
    dupDetector: function(remoteMatch, localMatch) {
        return remoteMatch.building_name === localMatch.building_name;
  }
});