lucene-利用内存中索引和多线程提高索引效率

9/6/2015来源:Java教程人气:1578

lucene-利用内存中索引和多线程提高索引效率转载地址: http://hi.baidu.com/idoneing/item/bc1cb914521c40603e87ce4d

1、RAMDirectory和FSDirectory对比

RAMDirectory在内存中所进行的操作比FSDirectory在磁盘上所完成的工作要快得多。

2、即使使用索引参数来使Lucene减少在磁盘上合并段的频率,基于FSDirectory的索引还要把它们写入磁盘,而RAMDirectory完全不用写磁盘。

3、将RAMDirectory做为一个缓冲器实现对索引的、批处理

1)创建一个基于FSDirectory的索引。

FSDirectoryfsdir=FSDirectory.getDirectory("/tmp/index",true);

2)创建一个基于RAMDirectory的索引

RAMDirectory ramdir=new RAMDirectory();

3)向基于RAMDirectory的索引中增加文档。

IndexWriter ramwriter=new IndexWriter(ramdir,newSimpleAnalyzer(),true);

IndexWriter fswriter=new IndexWriter(fsdir,newSimpleAnalyzer(),true);

while (...){

...

ramwriter.addDocument(doc);

}

4)不定期把缓存在RAMDirectory中的所有数据写入FSDirectory

if (可以写入)

{

fswriter.addIndexes(Directory[] {ramdir});//合并数据

ramwriter.close();

ramwriter=newIndexWriter(ramdir,new SimpleAnalyzer(),true);

}

5)转到第三步

4、并行索引多个索引文件

可以使用多线程的索引程序,并行使用把RAMDirectory作为一个缓冲器,然后使用addIndexes合并写入