簡體   English   中英

為什么lucene 2.4中的'刪除文檔'不起作用?

[英]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()之前不會將更改寫入索引。 除非您使用相同的參考進行搜索。

Lucene wiki

通常,最好使用IndexWriter進行刪除,除非

您必須按憑證編號刪除

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

您必須知道為給定的deleteDocuments調用刪除了多少文檔

我可以看到你想要內存中文檔的maxdoc值,所以它是一個更好的方法來使用Indexwriter

所以問題的答案是

您應該關閉Indexreader對象或使用Indexwriter進行刪除

在使用IndexWriter優化索引之前, maxDoc()不會更改。 至少,你需要commit()或你的刪除甚至可能永遠不會到磁盤。

但是, numDocs()應該在提交或優化之前返回未刪除文檔的數量。

使用IndexWriter添加和刪​​除文檔並以只讀方式打開IndexReader可能是更好的做法(當然也不那么令人困惑); 默認情況下,3.0將以只讀方式打開它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM