trie似乎适用于小字符串,但不适用于大型文档,所以不确定(1-100' s文本页面)。也许可以将倒排索引与后缀树结合起来,以获得两全其美的效果。或者可能使用带有存储为节点的单词的b树,以及每个节点的trie。不确定。想知道什么是好的数据结构(b-tree,linked-list等)。
我正在考虑搜索常规书籍,网页和源代码等文档,因此将单词存储在倒排索引中的想法似乎并不合适。如果您需要为每个解决方案提供替代解决方案,或者是否存在适用于所有解决方案的通用解决方案,或者它们的组合,将会有所帮助。
答案 0 :(得分:2)
您需要在一天结束时使用反向索引来交错来自每个查询字词的匹配结果,但可以从Trie或Hash Map构建反向索引。 trie将允许模糊查找,而基于散列索引的反向索引仅允许精确查找令牌。
要优化内存使用,您可以使用内存优化版本的Trie,如Radix Tree或Adaptive Radix Tree(ART)。我使用class
为我开展的开源模糊搜索引擎项目取得了巨大成功:https://github.com/typesense/typesense
使用Typesense,我能够在大约165 MB的RAM中索引大约100万个黑客新闻标题(磁盘上的未压缩大小为85 MB)。如果您的用例更具体,并且不需要我添加到数据结构中的某些元数据字段,您可以进一步挤压它。