我们每隔7小时左右对Lucene索引和增量索引每7天进行一次全部重新索引(即从头开始创建索引)。我们的索引大约有700,000个文档,全部索引大约需要17个小时(这不是问题)。在Lucene中增加索引之后应该优化索引吗?
当我们做增量索引,在过去的两个小时之内发生变化,我们只有索引的内容,因此需要少得多的时间 - 半小时左右。但是,我们已经注意到这段时间(大概10分钟)花费了很多时间来运行IndexWriter.optimize()方法。
的LuceneFAQ提到:
的的IndexWriter类支持压实索引数据库和加快查询的优化()方法。执行文档集的完整索引或索引的增量更新后,您可能想要使用此方法。如果您的增量更新频繁添加文档,您只需稍后执行一次优化,以避免优化的额外开销。
...但这似乎没有给出“频繁”含义的定义。优化是CPU密集型和非常IO密集型的,所以我们宁愿不这样做,如果我们能够摆脱它的话。在未优化的索引上运行查询的命中率有多高(特别是在完全重新索引之后,与20个增量索引(例如50,000个文档发生更改)后的查询性能相比)?我们应该在每个增量指数之后进行优化还是性能不理想?
这些变化*是在黑暗中没有它们的拍摄。 – 2008-09-23 11:18:21