我正在评估fullproof javascript全文搜索引擎,但我无法弄清楚它是否可以处理索引更新。从我对api的阅读中,我没有看到更新或删除索引中的内容。
例如,lunr.js可以在没有完整的重新索引的情况下对索引进行updates。
我希望它可以进行索引更新,因为在我的iPad上,创建索引需要10分钟,如果必须每次都重建索引,那就太高了。相比于创造lunrjs指数的40秒。但是,lunr的问题在于完整索引需要在内存中,而在完全防范中,它将索引放在本地WebSQL数据库中。
答案 0 :(得分:1)
我不能说完全,但没有什么能阻止你自己将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,没有什么能阻止你单独索引文档然后将转储的索引合并在一起,这里有一个issue有一些讨论和一个如果您有兴趣,可以链接到关于实施它的博客文章。
答案 1 :(得分:0)
由于缺少对此github issue的评论,看起来fullproof无法更新/删除其索引中的项目。