[英]Why does 'delete document' in lucene 2.4 not work?
我想用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
在我看來,最好使用Indexwriter刪除文檔,因為Indexreader會緩沖刪除,並且在調用close()之前不會將更改寫入索引。 除非您使用相同的參考進行搜索。
通常,最好使用IndexWriter進行刪除,除非
您必須按憑證編號刪除
您需要搜索才能立即反映刪除或
您必須知道為給定的deleteDocuments調用刪除了多少文檔
我可以看到你想要內存中文檔的maxdoc值,所以它是一個更好的方法來使用Indexwriter
所以問題的答案是
您應該關閉Indexreader對象或使用Indexwriter進行刪除
在使用IndexWriter
優化索引之前, maxDoc()
不會更改。 至少,你需要commit()
或你的刪除甚至可能永遠不會到磁盤。
但是, numDocs()
應該在提交或優化之前返回未刪除文檔的數量。
使用IndexWriter
添加和刪除文檔並以只讀方式打開IndexReader
可能是更好的做法(當然也不那么令人困惑); 默認情況下,3.0將以只讀方式打開它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.