簡體   English   中英

UpdateDocument之后的Lucene net IndexWriter即使使用optimize也會將索引的大小加倍?

[英]Lucene net IndexWriter after UpdateDocument doubles the size of index even with optimize?

我正在以正常方式創建索引:

var directory = FSDirectory.Open(...);
var analyzer = ...

var indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.SetWriteLockTimeout(30000);

indexWriter.AddDocument(doc1);
indexWriter.AddDocument(doc2);
indexWriter.AddDocument(...);

indexWriter.Commit();
indexWriter.Optimize();
indexWriter.Close();

這會創建一個5.8mb的索引

現在我需要准確地更新2個文件...每個文件中都添加了1個單詞...所以索引的大小應該增加很少量或根本不增加:

var indexWriter = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.SetWriteLockTimeout(30000);

indexWriter.UpdateDocument(doc1);
indexWriter.UpdateDocument(doc2);

indexWriter.Commit();
**indexWriter.Optimize();**
indexWriter.Close();

此操作以索引大小為_0.cfs文件的方式重復索引的大小,該文件的大小為索引之前的5.8mb ...並在_2.xxx文件中創建一個相同大小的全新索引...所以對於一個單詞改變的兩個文檔,它加倍!

如果我重復這個操作,它也會繼續這樣做...所以它只是將它永久地加倍。

我的想法是優化調用應該優化它而不會導致這樣的事情?

如何阻止它加倍我的索引?

日Thnx!

這通常是由於在優化時在索引上打開了IndexReaders / IndexSearchers。 IndexReaders在打開時會看到索引的快照,因此它們會鎖定文件,並且IndexWriter在關閉時無法刪除它們。

在optmize之后,您應該通過重新創建它們或使用IndexReader上的Reopen()方法刷新IndexReaders / IndexSearchers。 一旦IndexReaders / IndexSearchers刷新,如果您創建一個IndexWriter並立即關閉它,您應該看到文件消失。

話雖如此,如果你決定優化實時索引(你應該只刪除大量文檔時),你應該總是期望索引暫時增長3倍,這是“正常”大小。

暫無
暫無

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

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