我是java中Lucene
的新手。我遇到了一个非常奇怪的问题:
该服务部署在tomcat(struts 2)
中。当服务启动时,它将创建索引和搜索器实例以提供搜索服务。
然后我想在不停止服务的情况下更新索引。所以我创建了另一个索引目录,在此之后,我使用新的索引目录之前提到了搜索者。然后删除旧目录。但问题来了,我无法删除旧目录。 The message says the directory is still being used by an application.
但为什么呢?我已切换索引目录并关闭了搜索者的前indexReader
。我想念什么吗? Lucene
的版本为4.3。
错误消息如下:
Unable to delete file: D:\Projects\.metadata\.me_tcat\webapps\nlp\WEB-INF\data\index@1392881701\diag\_0.nvd
但是,我已拨打indexReader.close()
和indexDirectory.close()
。
BTW,有什么方法可以找到哪个线程在java中使用目录?
如果它困扰你,我很抱歉。
答案 0 :(得分:0)
实际上您无法删除该文件夹,因为当您创建新的IndexWriter
时,它将锁定该文件夹,并且不允许任何其他应用程序或服务修改此文件夹。安全问题。
我相信如果你想删除那个文件夹,你必须说
IndexWriter.close();
如果你在该文件夹上打开了一个IndexSearcher,你还需要说:
Directory directory = null;
DirectoryReader ireader = null;
try {
directory = FSDirectory.open(new File("path"));
ireader = DirectoryReader.open(directory);
} catch (Exception e) {
//
} finally {
try {
if(directory != null) {
directory.close();
}
if(ireader != null) {
ireader.close();
}
}catch(IOException e) {
//
}
}
这将解锁文件夹并使其可编辑。