为什么在将搜索器设为null后我无法删除Lucene中的索引目录?

时间:2014-02-20 07:53:31

标签: java lucene

我是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中使用目录?

如果它困扰你,我很抱歉。

1 个答案:

答案 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) {
        //
    }
}

这将解锁文件夹并使其可编辑。