写入后优化lucene索引是否必须?

时间:2010-10-12 06:51:16

标签: c# java performance lucene lucene.net

目前我在写完成后调用了indexwriter的optimize方法。由于我的数据集很大,因此需要很长时间(并且需要更多空间(2 *实际大小))来优化索引。我非常关注这一点,因为索引中经常包含大量文档。

所以

  1. 可以关闭优化吗​​?
  2. 性能影响是什么,比如在没有选择时查询的速度会慢多少?
  3. 干杯

2 个答案:

答案 0 :(得分:14)

Lucene FAQ说:

  

什么是索引优化以及何时应该使用它?

     

IndexWriter类支持optimize()方法,该方法可压缩索引数据库并加快查询速度。在执行文档集的完整索引或索引的增量更新之后,您可能希望使用此方法。如果增量更新经常添加文档,则只需要偶尔执行一次优化,以避免额外的优化开销。

     

如果我决定不优化索引,删除的文档何时会被删除?

     

删除的文档被标记为已删除。但是,在索引优化之前,它们在索引中消耗的空间不会被回收。随着更多文档被添加到索引中,该空间也将最终被回收,即使索引没有得到优化。

答案 1 :(得分:1)

您最了解自己的数据,因此我建议您执行一些测试,以衡量使用和不使用optimize步骤运行查询的速度。

根据javadocs,“在频繁更新的环境中,优化最好在低音量时间内完成,如果有的话”。您应该只在必要时进行优化。如果自上次优化以来只有5%的文档发生了变化,那么就没有必要了,所以要了解文档的更改频率。也许你可以optimise减少频率,比如说每隔几个小时或每天一次。

另请查看this thread,他们建议不要在索引不断更新的环境中调用优化,而是选择设置低mergeFactor