转载:http://www.mingyuanfeng.co.cc/search/label/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95%EF%BC%8C%E5%BC%80%E6%BA%90%EF%BC%8C%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E
搜索引擎的底层索引使用一种叫“倒排索引”(inverted index)的索引结构,倒排索引的结构容易理解,一张词(term)列表,加相应的docID链表。
貌似“简单”的倒排索引实际实现起来却并不那么容易,在内存中如何设计数据结构,在文件块中如何存储,如何压缩,如何加速查询,这些绝不是纸上画一下倒排索引图就可以的。witten 在其大作 Managing Gigabytes: Compressing and Indexing Documents and Images 中洋洋洒洒写了一大本,JUSTIN ZOBEL也在其大作Inverted Files for Text Search Engines中写了50多页,可见倒排索引不是那么"简单"的....
实践出真知,lucene和lemur的代码比较"大",刚开始以小的项目入手,查了一下刚好有个适合的范本,
http://www.oschina.net/ 开源中国里面有一个小的索引项目,叫卢福福搜索引擎 luyfsearch,名字倒是很可爱~~
google主页:
oschina主页:
正像作者自己所言,这个项目无法实际应用,但是作为学习范本确实不错,里面的编程方法都模仿了lucene的实现。
先看一个典型的做索引的API函数流程,有一个感性认识:
这个代码片段与用lucene建索引的过程是非常相近的。
IndexWriter *indexWriter=new IndexWriter(); //新建IndexWriter
indexWriter->open("/home/luyf/index/",true); //打开索引目录
indexWriter->setBufferDoc(2);
Document doc; //新建document 对象 <