【问题标题】:How to search using lunr.js如何使用 lunr.js 进行搜索
【发布时间】:2020-07-31 04:09:18
【问题描述】:

lunr.js 使用以下格式的数据就像魅力一样

[{
      'id': 1,
      'first_name': 'Joseph',
      'last_name': 'Williams',
      'email': 'jwilliams0@hud.gov',
      'gender': 'Male',
      'age': 94
    }, {
      'id': 2,
      'first_name': 'Christina',
      'last_name': 'Lawrence',
      'email': 'clawrence1@clickbank.net',
      'gender': 'Female',
      'age': 67
    }]

但当数据如下所示时不会。

[{
      'id': { 'id': 614, 'value': 1 },
      'first_name': { 'id': 244, 'value': 'Johnny' },
      'last_name': { 'id': 724, 'value': 'Fields' },
      'email': { 'id': 567, 'value': 'jfields0@barnesandnoble.com' },
      'gender': { 'id': 220, 'value': 'Male' },
      'age': { 'id': 745, 'value': 18 }
    }, {
      'id': { 'id': 204, 'value': 2 },
      'first_name': { 'id': 163, 'value': 'Kathy' },
      'last_name': { 'id': 991, 'value': 'Gilbert' },
      'email': { 'id': 453, 'value': 'kgilbert1@over-blog.com' },
      'gender': { 'id': 184, 'value': 'Female' },
      'age': { 'id': 337, 'value': 50 }
    }]

关于我应该如何索引我的数据以使其正常工作的任何提示。

【问题讨论】:

    标签: lunrjs


    【解决方案1】:

    添加到 lunr 的文档应采用与您在答案第一部分中的格式类似的格式,如果您的数据具有其他结构,那么您将不得不将其转换为 lunr 可以理解的格式。

    假设您的索引定义如下所示:

    var idx = lunr(function () {
      this.ref('id')
      this.field('first_name')
      this.field('last_name')
      this.field('email')
      this.field('gender')
      this.field('age')
    })
    

    然后,在将文档添加到索引之前,您需要通过如下函数对其进行映射:

    var mapDocument = function (doc) {
      return Object.keys(doc).reduce(function (memo, key) {
        memo[key] = doc[key].value
        return memo
      }, {})
    }
    

    该功能有效地展平了整个文档,您可能希望限制实际从文档中提取的字段,但希望您能理解。然后,上述函数会将您的文档从以下位置转换:

      {
        'id': { 'id': 614, 'value': 1 },
        'first_name': { 'id': 244, 'value': 'Johnny' },
        'last_name': { 'id': 724, 'value': 'Fields' },
        'email': { 'id': 567, 'value': 'jfields0@barnesandnoble.com' },
        'gender': { 'id': 220, 'value': 'Male' },
        'age': { 'id': 745, 'value': 18 }
      }
    

    到 lunr 可以理解的东西:

      {
        'id': 1,
        'first_name': 'Johnny',
        'last_name': 'Fields',
        'email': 'jfields0@barnesandnoble.com',
        'gender': 'Male',
        'age': 18
      }
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 2016-05-31
      • 2014-08-27
      • 2016-03-28
      • 1970-01-01
      • 2014-11-29
      • 2020-12-15
      • 2020-08-02
      相关资源
      最近更新 更多