合并索引

在第一次简历索引或重建索引时,为了提高建索引的速度,通常会先将索引保存在RAMDirectory,等内存中有一定量的索引再将索引合并到FSDirectory,由此可以加快索引建立的速度。

FSDirectory:是与文件系统的目录有关的,指向文件系统中的一个路径,因此在LUCENE向其写入索引时,会直接将索引写在磁盘上。
RAMDirectory是与内存相关的。在内存中存放一个区域,如果不将他的内容写入到磁盘,当机器退出后,里面的内容会消失。

LUCENE提供了一个接口,帮助开发者将不同的索引,比如不同物理位置的或是内存和物理位置的索引进行合并。

RAMDirectory ram = new RAMDirectory();
FSDDirectory fs = new FSDDirectory();
IndexWriter fsWriter = new IndexWriter(fs,new StandardAnalyzer(),true);

IndexWriter ramWriter = new IndexWriter(ram ,new StandardAnalyzer(),true);

Document doc1 = new Document();
Field field1 = new Field("name1","value",Field.Store.YES,Field.Index.TOKENIZED);
doc1.add(field);
Document doc2 = new Document();
Field field2 = new Field("name1","value",Field.Store.YES,Field.Index.TOKENIZED);
doc2.add(field);

ramWriter.addDocument(doc1);
ramWriter.close();

fsWriter.addDocument(doc2);
fsWriter.addIndexes(new Directory({ram}));

fsWriter.close(); 
 
注意:addIndexes方法是一个DIRECTORY的类型数组,因此可以合并多个目录下的索引。
在合并内存中的索引时,一定要先将其对应的INDEXWRITER关闭,以保证滞留在缓存中的文档被刷到RAMDirectory中去,如果不关闭,那么会发现索引文件并没有写入到目录中去。

你可能感兴趣的:(Lucene)