繁体   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