了解Bloodhound.tokenizers.obj.whitespace

Joe*_*ang 11 twitter jquery twitter-typeahead bloodhound

所有,我试图根据一些工作样本申请Twitter typeaheadBloodhound进入我的项目,但我无法理解下面的代码.

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 - 具有签名(查询)的函数,用于将查询转换为字符串标记数组.需要.

这是什么意思 ?有人可以帮忙告诉我更多关于它的信息,以便我更好地理解吗?

dav*_*vew 7

我在这里找到了一些有用的信息

https://github.com/twitter/typeahead.js/blob/master/doc/migration/0.10.0.md#tokenization-methods-must-be-provided

最常见的标记化方法在空白或非单词字符上拆分给定的字符串.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');
Run Code Online (Sandbox Code Playgroud)

对于查询标记化,您可能希望使用上述方法之一.对于基准标记化,您可能希望执行更高级的操作.

对于基准,有时您希望从多个属性中删除令牌.例如,如果您正在为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);
  }
Run Code Online (Sandbox Code Playgroud)

可能还有一种情况是您希望在后端执行基准标记化.最好的方法是只在属性中添加一个包含这些标记的属性.然后,您可以提供只返回已存在的标记的标记生成器:

  var sports = [
    { value: 'football', tokens: ['football', 'pigskin'] },
    { value: 'basketball', tokens: ['basketball', 'bball'] }
  ];

  function customTokenizer(datum) { return datum.tokens; }
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以用来标记基准,这实际上取决于你想要完成的任务.

似乎很遗憾,从主要文档中找不到这些信息.


小智 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