如何加快IndexReader.open

时间:2013-05-10 01:15:36

标签: java lucene

当我使用DirectoryReader.open打开一些超过100G的目录时,却打开了很长时间。(lucene 4.2)   有人可以告诉我应该用什么政策/优化来加速读者的开放?   也许应该注意索引。

也许我说不清楚。

每天有超过7000万个数据需要编入索引。   对于每个索引数据库,存储空间为40G   如果检索支持在一个月内。(30 * 40G,实际上需要支持更长时间)我必须打开所有的indexReader,将它们添加到MultiReader并重用它们。打开它们非常慢。我只知道设置IndexWriter的mergeFactor值。 (较大的值可加快索引编制速度,但会增加需要同时打开的文件数。)我可以设置一个较小的值来优化。还有其他任何参数或解决方案。

1 个答案:

答案 0 :(得分:2)

打开IndexReader是一项代价高昂的操作。通常最好保持相同的IndexReader并重用它。您可以通过致电DirectoryReader.openIfChanged来保持最新状态:

IndexReader newReader = DirectoryReader.openIfChanged(oldReader)
if (newReader == null) {
    readerToUse = oldReader;
} else {
    readerToUse = newReader;
    oldReader.close(); //Make sure you close the old one!!

即使对索引进行了更改并生成了新的阅读器,这通常也会比DirectoryReader.open成本低得多。

相关问题