【发布时间】:2011-08-05 13:01:11
【问题描述】:
我正在尝试以增量模式刷新 Lucene 索引,该模式正在更新已更改的文档并保持其他未更改的文档不变。
为了更新更改的文档,我使用IndexWriter.deleteDocuments(Query) 删除这些文档,然后使用IndexWriter.addDocument() 添加更新的文档。
IndexWriter.deleteDocuments 中使用的 Query 对象包含大约 12-15 个术语。在刷新索引的过程中,有时我还需要通过使用IndexWriter.deleteDocuments 删除所有文档然后添加新文档来进行完全刷新。
问题是当我在删除大约 100000 个文档后调用 IndexWriter.flush() 时,执行需要很长时间并抛出 OutOfMemoryError。如果我禁用刷新,索引会快速到 2000000 个文档删除,然后它会抛出一个OutOfMemoryError。我试图将IndexWriter.setRAMBufferSizeMB 设置为 500 以避免内存不足错误,但没有运气。索引大小为 1.8 GB。
【问题讨论】: