由于this question中列出的原因,我正在构建自己的客户端搜索引擎,而不是使用基于fullproof
的ydn-full-text
库。它归结为fullproof
产生了“太多的记录”,大约300.000条记录,而(在词干之后)只有大约7700个独特的单词。因此,我的“理论”是完全基于传统的假设,这些假设仅适用于服务器端:
而在客户端:
基于这些假设,我开始使用基本倒排索引(仅提供7700条记录,IndexedDB
是文档/ nosql数据库)。这个倒排索引已经使用Lancaster词干分析器(两个或三个流行词汇中最具攻击性的一个)来阻止,并且在搜索期间我将检索每个词的索引,根据不同索引的重叠和相似性分配分数。打字与原版(Jaro-Winkler距离)。
这种方法的问题:
所以,最后回答我的问题:如何以最小的指数增长缓解上述问题?我确实理解我的方法将是CPU密集型的,但由于传统的全文搜索索引看起来非常大,这似乎是唯一合理的道路。 (指出我很好的资源或作品也很感激)
1 这或多或少地将非结构化文本人为地分成小段,但是这种人工分裂在相关领域中是标准化的,因此也在这里使用。我没有研究将这些“片段”保持在一起并在fullproof
处抛出大量文本的索引大小的影响。我认为这不会产生很大的不同,但如果我弄错了,那么请指出这一点。
答案 0 :(得分:3)
这是一个很好的问题,感谢为the IndexedDB tag带来一些品质。
虽然这个答案还没有完全准备就绪,但我想告诉您,如果您使用--enable-experimental-web-platform-features
启动Chrome,那么应该有一些可用的功能可以帮助您实现您的目标
IDBObjectStore.openKeyCursor()
- 无价值游标,以防您只能使用干线IDBCursor.continuePrimaryKey(key, primaryKey)
- 允许您跳过具有相同键的项目我通过Chrome团队的IDB开发人员了解了这些情况,虽然我还没有亲自试验这些,但这似乎是一个完美的用例。
我的想法是,如果您在同一列上使用两个不同的索引来解决此问题,您可能能够获得您正在寻找的类似连接的行为,而不会使用无偿索引使您的商店膨胀。
虽然IDB中consecutive writes非常糟糕,但读取效果很好。 7700个条目的良好表现应该是非常稳定的。