分配后无法将文档添加到 lunr 索引(类型错误:idx.add 不是函数)



我正在尝试创建一个 lunr 索引,并在分配后能够向其添加文档。这是我正在尝试做的事情的稍微简化的版本:

var documents = [{
  'id': '1',
  'content': 'hello'
}, {
  'id': '2',
  'content': 'world'
}, {
  'id': '3',
  'content': '!'
}];
var idx = lunr(function() {
  this.ref('id');
  this.field('content');
});
for (var i = 0; i < documents.length; ++i) {
  idx.add(documents[i]);
}

这给了我以下错误:TypeError:idx.add不是一个函数。我看过多个教程,说这是你应该能够做到的。

如果我在分配 idx 时添加文档,它只对我有用;

var documents = [{
  'id': '1',
  'content': 'hello'
}, {
  'id': '2',
  'content': 'world'
}, {
  'id': '3',
  'content': '!'
}];
var idx = lunr(function() {
  this.ref('id');
  this.field('content');
  for (var i = 0; i < documents.length; ++i) {
    this.add(documents[i]);
  }
});

我仍然是一个JavaScript菜鸟,所以这可能不一定与lunr有关。

您链接到的教程适用于旧版本的 Lunr。最新版本要求您将所有文档添加到传递给 lunr 函数的函数中的索引中。换句话说,您的第二个示例对于最新版本的 Lunr 是正确的。

有一个关于升级到最新版本的指南,希望它能涵盖该(和其他(教程中的旧版本与最新版本之间的区别。

我有同样的错误,你必须使用旧的v1.0.0来做到这一点。

1.0 版

                  `var idx = lunr(function () {
                     this.ref('id')
                       this.field('text')
                     })

  // somewhere else, when you received 1 json from a stream.
 oboe().node('features.*', function( ___feature___ ){
                                 idx.add( one-node-json)
                     )}

'

v2.x你不能这样做,在2.x中,文档是在配置功能结束之前添加的

      `var idx = lunr(function () {
                    this.ref('id')
                   this.field('text')
               // at this moment you have to have whole json,  not work with oboe stream json
               // when stream json, only 1 node received at a time, you do not have whole-json yet 
                //until you reach stream end
                this.add( whole-json)
               })`

为了避免将整个 1GB 的 json 存储在内存中,我选择 oboe 来流式传输 json,意思是一次只能发出 1 个 json,我只能使用 v1.x 将这一段 json 添加到 idx。

v2.x,我必须将这 1 个 json 一个接一个地存储到最后,在内存中加到 1 GB,那时,我可以将整个 1GB 的 json 添加到 idx,这不起作用,因为许多用户的浏览器会在内存中崩溃 1GB。

但是 v1.x 可以工作,因为它使用更少的内存,一次只添加 1 个 json。

我已经要求作者将来解决这个问题

v1 v2 差异

相关内容

  • 没有找到相关文章

最新更新