我想像应用程序一样开发谷歌桌面搜索,我想知道我应该使用哪种索引技术/算法,以便我可以获得非常快速的数据回溯。
答案 0 :(得分:7)
一般来说,你想要的是Inverted Index。您可以自己进行索引编制,但要做到这一点需要做很多工作 - 您需要处理stemming,stop words,扩展发布列表以包含文档中的位置,以便您可以处理多字查询,等等。然后,您需要将索引存储在磁盘上的B-Tree中 - 或者通过使用现有数据库来存储磁盘存储,例如BDB,您可以让自己更轻松。您还需要编写一个解释用户查询的查询计划程序,执行query expansion并将它们转换为一系列索引扫描。维基百科关于Search Engine Indexing的文章也对所有挑战提供了很好的概述。
或者,您可以利用现有工作并使用现成的全文索引解决方案,例如Apache Lucene和Compass(基于Lucene构建)。这些工具几乎可以处理上面详述的所有内容(以及更多内容),只需通过将所有文档提供到Lucene中来编写工具来构建和更新索引,以及允许用户搜索它的UI。
答案 1 :(得分:3)
用于压缩bzip2中数据的Burrows-Wheeler变换可用于使文本的子字符串搜索成为一个恒定时间函数。
http://en.wikipedia.org/wiki/Burrows-Wheeler_transform
我没有在网上看过简单的介绍,但这里有很多细节: