当我使用DirectoryReader.open打开一些超过100G的目录时,却打开了很长时间。(lucene 4.2) 有人可以告诉我应该用什么政策/优化来加速读者的开放? 也许应该注意索引。
也许我说不清楚。
每天有超过7000万个数据需要编入索引。 对于每个索引数据库,存储空间为40G 如果检索支持在一个月内。(30 * 40G,实际上需要支持更长时间)我必须打开所有的indexReader,将它们添加到MultiReader并重用它们。打开它们非常慢。我只知道设置IndexWriter的mergeFactor值。 (较大的值可加快索引编制速度,但会增加需要同时打开的文件数。)我可以设置一个较小的值来优化。还有其他任何参数或解决方案。
答案 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
成本低得多。