我正在评估富洛夫 javascript全文搜索引擎,但我不知道它是否能够处理索引更新。从我对api的阅读中,没有提到更新或删除索引中的内容。
例如,lunr.js可以使更新到索引而不需要完全重新索引。
我希望它能够进行索引更新,因为在我的iPad上,创建索引需要10分钟,如果每次都必须重建索引,这是非常困难的。相对于40秒来创建lunrjs索引。然而,lunr的问题是,完整的索引需要在内存中,而在完全证明中,它将索引放在本地WebSQL db中。
发布于 2014-03-27 00:29:45
考虑到在这个github问题上缺少注释,所以它似乎无法从索引中更新/删除条目。
发布于 2014-03-21 10:51:48
我不能说完全可靠,但是没有什么可以阻止您自己将lunr索引快照到客户端存储中。
鉴于以下指数:
var idx = lunr(function () {
this.ref('id')
this.field('title')
})可以将其转储为JSON,如下所示:
var dump = JSON.stringify(idx)现在您可以在任何您喜欢的地方存储这个转储,我对WebSQL并不太熟悉,但是将它存储在localStorage中可能如下所示:
localStorage.setItem('lunr_dump', dump)若要重新加载索引,请执行以下操作:
var idx = lunr.Index.load(dump)将转储索引加载回lunr应该比每次重建它快几个数量级。
正如您所提到的,lunr不需要每次都重新构建整个索引,因此假设您更新了一个文档,并且希望保持转储版本的最新更新:
idx.on('update', function (doc, index) {
localStorage.setItem('lunr_dump', JSON.stringify(index))
})
idx.update(someDocument)这将再次转储整个索引,包括更新时所做的任何更改。对转储进行基准测试是值得的,因为可能会有一些开销,特别是较大的索引。
如果您的数据是相对静态的,您实际上可以在服务器上预构建一个索引,并将其发送到客户机,保存客户端在每次加载页面时构建索引的工作,请查看https://github.com/olivernn/lunr-index-builder。
不过,您可以更进一步,因为转储索引只是JSON,没有什么可以阻止您单独索引文档,然后将转储的索引合并到一起,这里有一个问题,其中有一些讨论,还有一个链接到一个博客文章,如果您感兴趣的话,可以实现它。
https://stackoverflow.com/questions/22528104
复制相似问题