[英]Forgot to close the Lucene IndexWriter after adding Documents to the index
[英]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.