我对起草不佳的问题不好我正在尝试将 RAMDirectory 索引备份到文件系统目录路径中,以便在发生任何崩溃时恢复索引。
我已经尝试过这些方法
Directory.copy(ramDir, FSDirectory.open(indexDir), false);
但是这种方法甚至没有出现在较新版本的 Lucene 中。
我使用的第二种方法是 indexwriter.addIndexes() 但它抛出了这个异常
org.apache.lucene.index.IndexNotFoundException: no segments* file found in MMapDirectory
这是源代码
BufferedReader reader=new BufferedReader(new FileReader("hash.txt"));
RAMDirectory idx=new RAMDirectory();
String str=reader.readLine();
while(str!=null)
{
Document doc = new Document();
doc.add(new StringField("SPAM",str, Field.Store.YES));
str=reader.readLine();
dcmnts.add(doc);
}
String indexDir="C:\\Users\\xyz\\Desktop\\cmengine\\src\\com\\company\\lucene";
Directory dir = FSDirectory.open(Paths.get(indexDir));
writer.addDocuments(dcmnts);//here dcmnts is ArrayList<Documents>
writer.commit();
// writer.addIndexes(dir); i even tried this didnt worked so i took
//seprate index writer
writer.close();
IndexWriterConfig iwc2 = new IndexWriterConfig(analyzer);
iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
IndexWriter writer2=new IndexWriter(idx, iwc2);
writer2.addIndexes(dir);
在这里,我什至尝试使用相同的 IndexWriter 将 RAMDirectory 添加到文件系统。但没有任何效果。是我调用提交然后关闭的顺序这是错误的吗?RAMDirectory 有一个方法 Sync(Collection) ,它的 javadoc 正是我需要的,但我不知道如何使用它。解决这个问题的最佳方法是什么。以下答案我检查了 SO 但没有任何效果.. Directory.copy 方法