我不清楚如何使用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的所有信息都是比较远程和预取。我只使用一个数据源,它只有多个具有相同名称的记录。
答案 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;
}
});