为什么lucene 2.4中的'删除文档'不起作用?

Sun*_*il 2 java lucene

我想用java删除lucene 2.4中的文档.我的代码是

  Directory directory = FSDirectory.getDirectory("c:/index");
  IndexReader indexReader = IndexReader.open(directory);
  System.out.println("num="+indexReader.maxDoc());
  indexReader.deleteDocuments(new Term("name","1"));
  System.out.println("num="+indexReader.maxDoc());

 output 
         num=1
         num=1     
Run Code Online (Sandbox Code Playgroud)

Nar*_*yan 5

在我看来,最好使用Indexwriter删除文档,因为Indexreader会 缓冲删除,并且在调用close()之前不会将更改写入索引.除非您使用相同的参考进行搜索.

Lucene的维基状态

通常,最好使用IndexWriter进行删除,除非

您必须按凭证编号删除

您需要搜索才能立即反映删除或

您必须知道为给定的deleteDocuments调用删除了多少文档

我可以看到你想要内存中文档的maxdoc值,所以它是一个更好的方法来使用Indexwriter

所以问题的答案是

您应该关闭Indexreader对象或使用Indexwriter进行删除