gpt4 book ai didi

indexing - 即使使用优化,UpdateDocument 后 Lucene Net IndexWriter 也会使索引大小加倍?

转载 作者:行者123 更新时间:2023-12-02 19:23:32 25 4
gpt4 key购买 nike

我正在以正常方式创建索引:

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 文件中相同大小的全新索引...因此,对于一个单词更改的两个文档,它会增加一倍!

如果我重复该操作,它也会继续执行此操作...所以它只会永远加倍。

我的想法是,优化调用应该优化它,而不是导致这样的事情?

如何阻止它使我的索引加倍?

谢谢!

最佳答案

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

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

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

关于indexing - 即使使用优化,UpdateDocument 后 Lucene Net IndexWriter 也会使索引大小加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10831309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com