目前我在写完成后调用了indexwriter的optimize方法。由于我的数据集很大,因此需要很长时间(并且需要更多空间(2 *实际大小))来优化索引。我非常关注这一点,因为索引中经常包含大量文档。
所以
干杯
答案 0 :(得分:14)
什么是索引优化以及何时应该使用它?
IndexWriter类支持optimize()方法,该方法可压缩索引数据库并加快查询速度。在执行文档集的完整索引或索引的增量更新之后,您可能希望使用此方法。如果增量更新经常添加文档,则只需要偶尔执行一次优化,以避免额外的优化开销。
如果我决定不优化索引,删除的文档何时会被删除?
删除的文档被标记为已删除。但是,在索引优化之前,它们在索引中消耗的空间不会被回收。随着更多文档被添加到索引中,该空间也将最终被回收,即使索引没有得到优化。
答案 1 :(得分:1)
您最了解自己的数据,因此我建议您执行一些测试,以衡量使用和不使用optimize
步骤运行查询的速度。
根据javadocs,“在频繁更新的环境中,优化最好在低音量时间内完成,如果有的话”。您应该只在必要时进行优化。如果自上次优化以来只有5%的文档发生了变化,那么就没有必要了,所以要了解文档的更改频率。也许你可以optimise
减少频率,比如说每隔几个小时或每天一次。
另请查看this thread,他们建议不要在索引不断更新的环境中调用优化,而是选择设置低mergeFactor
。