lucene-利用內存中索引和多線程提升索引效率

轉載地址: http://hi.baidu.com/idoneing/item/bc1cb914521c40603e87ce4d

一、RAMDirectory和FSDirectory對比緩存

RAMDirectory在內存中所進行的操做比FSDirectory在磁盤上所完成的工做要快得多。多線程

二、即便使用索引參數來使Lucene減小在磁盤上合併段的頻率,基於FSDirectory的索引還要把它們寫入磁盤,而RAMDirectory徹底不用寫磁盤。線程

三、將RAMDirectory作爲一個緩衝器實現對索引的、批處理索引

1)建立一個基於FSDirectory的索引。內存

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

2)建立一個基於RAMDirectory的索引get

RAMDirectory ramdir=new RAMDirectory();it

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)轉到第三步

四、並行索引多個索引文件

能夠使用多線程的索引程序,並行使用把RAMDirectory做爲一個緩衝器,而後使用addIndexes合併寫入

相關文章
相關標籤/搜索