欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-02 19:32:43
...

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合并写入