【问题标题】:Lucene net IndexWriter after UpdateDocument doubles the size of index even with optimize?UpdateDocument 后的 Lucene 网络 IndexWriter 即使使用优化也会使索引的大小翻倍?
【发布时间】: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


    【解决方案1】:

    这通常是由于在优化时在索引上打开了 IndexReaders/IndexSearchers 造成的。 IndexReader 在打开时会看到索引的快照,因此它们会锁定文件,而 IndexWriter 在关闭时无法删除它们。

    optmize 之后,您应该通过重新创建 IndexReaders/IndexSearchers 或使用 IndexReader 上的 Reopen() 方法来刷新它们。刷新 IndexReaders/IndexSearchers 后,如果您创建一个 IndexWriter 并立即关闭它,您应该会看到文件消失。

    话虽如此,如果您决定优化实时索引(只有在删除大量文档时才应该这样做),您应该始终期望索引会暂时增长 3 倍“正常”大小。

    【讨论】:

    • Thnx,做到了!我将 IndexSearcher 包装在 c# using 语句中,该语句在搜索后处理索引而不是让它挂起,这就是诀窍!顺便提一句。您知道缓存 IndexSearcher 以进行性能分析会更聪明吗?此外,如果我缓存它,有没有办法在晚上强制杀死所有搜索者(我的索引是由一个单独的应用程序每天晚上完成一次,而几乎没有人使用搜索器 Web 应用程序)?
    • 是的,您应该尽可能长时间地保持搜索器打开,因为内部 lucene 会在底层 IndexReader 中缓存信息,这有助于提高性能。我通常做的是有一个管理器来保存我的 IndexSearcher 实例,通常每个索引 1 个。当我要关闭我的 IndexWriter 时,我首先使用 Manager 关闭 IndexSearchers,然后再关闭 IndexWriter。
    • 我已经对我的索引进行了优化。它的大小从 370 GB 增长到 826 GB,但文件现在是一个段,并且在尝试了您的建议后它的大小并没有缩小。你能给我更多的建议吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多