我正在以正常方式创建索引:
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();
此操作将索引的大小翻倍,使其保留索引大小为 5.8mb 的_0.cfs文件……并在 _2.xxx 文件中创建一个相同大小的全新索引……所以对于一个两个文件一个词的变化,它加倍!
如果我重复该操作,它也会继续这样做……所以它只会永远加倍。
我的想法是优化调用应该优化它而不是导致这样的事情?
如何阻止它使我的索引翻倍?
谢谢!