Joe*_*ang 11 twitter jquery twitter-typeahead bloodhound
所有,我试图根据一些工作样本申请Twitter typeahead
并Bloodhound
进入我的项目,但我无法理解下面的代码.
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('songs'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
Run Code Online (Sandbox Code Playgroud)
原始代码如下所示.
var songlist = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('songs'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
remote: '/api/demo/GetSongs?searchTterm=%QUERY'
});
Run Code Online (Sandbox Code Playgroud)
该公文只是说:
datumTokenizer - 具有签名(datum)的函数,用于将数据转换为字符串标记数组.需要.
queryTokenizer - 具有签名(查询)的函数,用于将查询转换为字符串标记数组.需要.
这是什么意思 ?有人可以帮忙告诉我更多关于它的信息,以便我更好地理解吗?
我在这里找到了一些有用的信息
最常见的标记化方法在空白或非单词字符上拆分给定的字符串.Bloodhound为开箱即用的方法提供了实现:
Run Code Online (Sandbox Code Playgroud)// 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的名称,所有者和主要语言派生的令牌可能是明智的:
Run Code Online (Sandbox Code Playgroud)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); }
可能还有一种情况是您希望在后端执行基准标记化.最好的方法是只在属性中添加一个包含这些标记的属性.然后,您可以提供只返回已存在的标记的标记生成器:
Run Code Online (Sandbox Code Playgroud)var sports = [ { value: 'football', tokens: ['football', 'pigskin'] }, { value: 'basketball', tokens: ['basketball', 'bball'] } ]; function customTokenizer(datum) { return datum.tokens; }
还有很多其他方法可以用来标记基准,这实际上取决于你想要完成的任务.
似乎很遗憾,从主要文档中找不到这些信息.
小智 3
它是用于将数据或查询拆分为单词数组以执行搜索/匹配的标记。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
归档时间: |
|
查看次数: |
7461 次 |
最近记录: |