索引的合并

FSDirectory和RAMDirectory

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

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

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

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)