【发布时间】:2012-06-05 13:48:04
【问题描述】:
我正在以正常方式创建索引:
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 文件中相同大小的全新索引...所以对于一个单词的两个文档的更改,它会加倍!
如果我重复该操作,它也会继续这样做......所以它只会永远加倍。
我的想法是 Optimize 调用应该优化它而不是导致这样的事情?
如何阻止它使我的索引翻倍?
谢谢!
【问题讨论】:
标签: indexing lucene.net lucene