我想要将内存中的Lucene索引写回磁盘,超过最初加载的索引。目前,如果我调用Directory.Copy( _ramDirectory, _fileSystemDirectory, false )
,它只是将新文件添加到目录中,但在那里留下旧的(陈旧的)文件。
我试着打电话:
new IndexWriter( _fsd, _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED ).Close();
...(在目录中创建一个新的空索引)但这有奇怪的行为,有时会导致整个索引在下次运行程序时被清除干净。
有什么方法可以简单地获取文件系统索引当前使用的文件列表,这样我可以手动删除它们吗?我不想盲目地删除目录中的所有文件,以防有一些非索引文件。
显然FSDirectory.ListAll()
列出了物理目录中的所有文件,无论它们是否实际上是索引的一部分。有什么办法可以判断索引是否使用/创建了特定文件?我的意思是由于Lucene奇怪的文件命名约定,我甚至无法检查文件扩展名。
答案 0 :(得分:3)
IndexWriter.DeleteAll()
并进行优化。 答案 1 :(得分:3)
我绝对建议你不要在Lucene索引文件夹中混合使用其他文件。
最佳解决方案是使用具有create参数的IndexWriter构造函数创建新索引,该构造函数将在该位置创建新索引。然后使用IndexWriter.AddIndexesNoOptimize(Directory[] dirs)
方法将RamDirectory添加到FSDirectory