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

Typeahead/Bloodhound: Removing duplicates from local

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

我正在使用 0.11.1 版

从具有如下记录的数据库中提取数据集:

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

我的 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 的所有信息都是比较远程和预取。我只使用一个数据源,它只有多个同名记录。

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

本地数据源存在问题,因此您的 dupDetector 无法正常工作。它永远不会被调用。尝试使用 console.log 来查看。

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

看来您是从 JSON 加载的,所以为什么不直接将它弹出到您的 "local" 服务器上,而是 "prefetch" 呢?否则看起来你将不得不手动完成。

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;
  }
});