我想用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
答案 0 :(得分:5)
在我看来,最好使用Indexwriter删除文档,因为Indexreader 缓冲删除,并且在调用close()之前不会对索引进行更改。除非您使用相同的参考资料进行搜索。
通常最好使用IndexWriter 删除,除非
您必须按凭证编号
删除您需要进行搜索 立即反映删除或
你必须知道有多少文件 被删除了一个给定的 deleteDocuments调用
我可以看到你想要内存中文档的maxdoc值,所以它是一个更好的方法来使用Indexwriter
所以问题的答案是
您应该关闭Indexreader对象或使用Indexwriter进行删除
答案 1 :(得分:3)
maxDoc()
优化索引之前, IndexWriter
不会更改。至少,您需要commit()
,否则您的删除甚至可能永远不会进入磁盘。
但是,numDocs()
应该在提交或优化之前返回未删除文档的数量。
使用IndexWriter
添加和删除文档以及打开IndexReader
只读文件可能是更好的做法(当然也不那么令人困惑); 3.0默认情况下会以只读方式打开它们。