我最近将我们的搜索应用程序从 Lucene 2.4 升级到了 Lucene 3.6.2 我们运行了一个工作,它每 4 小时从数据库中提取更新并更新现有的 Lucene 索引。
用于创建索引编写器的代码 -:
indexWriter = new IndexWriter(dirPath, new IndexWriterConfig(Version.LUCENE_36,
analyzer).setOpenMode(OpenMode.APPEND));
发布成功将文档添加到我们在索引编写器上执行的现有索引。
indexWriter.commit();
indexWriter.deleteUnusedFiles();
indexWriter.close();
发布我们在 IndexSearcher 上执行的上述步骤
this.indexSrchr.getIndexReader().decRef();
this.indexSrchr.close();
// Create a new Index Searcher to point to updated index.
this.indexSrchr = new IndexSearcher(IndexReader.open(dir));
Index Writer 在 CREATE 模式下打开时工作得非常好,但在 APPEND 模式下,每次我尝试更新索引时都会添加打开的已删除文件。
使用的 Unix 命令 -:
lsof -u user | grep delete.
如果 lucene 级别本身存在问题或者我们做错了什么,有人可以帮助我吗?
我能够解决这个问题,因为在代码中的某个地方我们没有明确地对 indexReader 进行减少引用
this.indexSrchr.getIndexReader().decRef()
但是有人可以帮我理解为什么
this.indexSrchr.close()
不会关闭 Index Searcher 的底层索引读取器?