Can't add documents to lunr index after assignment (TypeError: idx.add is not a function)
Can't add documents to lunr index after assignment (TypeError: idx.add is not a function)
我正在尝试创建 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]);
}
这给我以下错误:类型错误:idx.add 不是一个函数。
我见过很多人 tutorials 说这就是你应该能够做到的。
它只对我有用,但如果我在分配 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 是正确的。
有一个关于升级到最新版本的 guide,它有望涵盖该(和其他)教程中的旧版本与最新版本之间的差异。
我有同样的错误,你必须使用旧的 v1.0.0 才能这样做。
v1.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,我选择双簧管来传输 json,意思是,一次只发射 1 个 json,我只能使用 v1.x 将这一块 json 添加到 idx.
v2.x,我要把那1块json一个一个存到最后,内存加起来1GB,到时候可以加整1GBjson to idx,不工作,因为许多用户的浏览器会在 1GB 内存时崩溃。
但是 v1.x 可以工作,因为它使用的内存少得多,一次只添加 1 个 json。
我正在尝试创建 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]);
}
这给我以下错误:类型错误:idx.add 不是一个函数。 我见过很多人 tutorials 说这就是你应该能够做到的。
它只对我有用,但如果我在分配 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 是正确的。
有一个关于升级到最新版本的 guide,它有望涵盖该(和其他)教程中的旧版本与最新版本之间的差异。
我有同样的错误,你必须使用旧的 v1.0.0 才能这样做。
v1.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,我选择双簧管来传输 json,意思是,一次只发射 1 个 json,我只能使用 v1.x 将这一块 json 添加到 idx.
v2.x,我要把那1块json一个一个存到最后,内存加起来1GB,到时候可以加整1GBjson to idx,不工作,因为许多用户的浏览器会在 1GB 内存时崩溃。
但是 v1.x 可以工作,因为它使用的内存少得多,一次只添加 1 个 json。