所有,我试图根据一些工作样本将Twitter typeahead
和Bloodhound
应用到我的项目中,但我无法理解下面的代码。
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('songs'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
原始代码如下所示。
var songlist = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('songs'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
remote: '/api/demo/GetSongs?searchTterm=%QUERY'
});
datumTokenizer - 具有转换签名(datum)的函数 将数据转换为字符串标记数组。必需的。
queryTokenizer - 具有转换的签名(查询)的函数 查询字符串标记数组。必需的。
这是什么意思?有人可以帮忙告诉我更多关于它的信息,以便我更好地理解吗?
答案 0 :(得分:7)
我在这里找到了一些有用的信息:
最常见的标记化方法在空格或非字字符上拆分给定的字符串。 Bloodhound为开箱即用的方法提供了实现:
// returns ['one', 'two', 'twenty-five'] Bloodhound.tokenizers.whitespace(' one two twenty-five'); // returns ['one', 'two', 'twenty', 'five'] Bloodhound.tokenizers.nonword(' one two twenty-five');
对于查询标记化,您可能希望使用上述方法之一。对于基准标记化,您可能希望做一些更高级的事情。
对于基准,有时您希望从多个属性中删除令牌。例如,如果您正在为GitHub存储库构建搜索引擎,那么从repo的名称,所有者和主要语言派生的令牌可能是明智的:
var repos = [ { name: 'example', owner: 'John Doe', language: 'JavaScript' }, { name: 'another example', owner: 'Joe Doe', language: 'Scala' } ]; function customTokenizer(datum) { var nameTokens = Bloodhound.tokenizers.whitespace(datum.name); var ownerTokens = Bloodhound.tokenizers.whitespace(datum.owner); var languageTokens = Bloodhound.tokenizers.whitespace(datum.language); return nameTokens.concat(ownerTokens).concat(languageTokens); }
可能还有一种情况是您希望在后端执行基准标记化。最好的方法是只在属性中添加一个包含这些标记的属性。然后,您可以提供只返回已存在的标记的标记生成器:
var sports = [ { value: 'football', tokens: ['football', 'pigskin'] }, { value: 'basketball', tokens: ['basketball', 'bball'] } ]; function customTokenizer(datum) { return datum.tokens; }
还有很多其他方法可以用来标记基准,这实际上取决于你想要实现的目标。
似乎不幸的是,从主要文档中找不到这些信息。
答案 1 :(得分:1)
它是用于将数据或查询拆分为单词数组以执行搜索/匹配的标记。 datumTokenizer引用你的数据,queryTokenizer引用所做的查询(通常是在输入中输入的文本)。
如果您的数据是一个对象数组(即json),则datumTokenizer允许您指定要对其执行搜索的对象的哪个字段。例如,如果要搜索名称和代码字段,可以输入Bloodhound.tokenizers.obj.whitespace(['name','code'])
之类的内容或提供自定义函数。
您可以在以下网址找到更多信息:https://github.com/twitter/typeahead.js/blob/master/doc/migration/0.10.0.md#tokenization-methods-must-be-provided