gpt4 book ai didi

optimization - Lucene中的增量索引之后应该优化索引吗?

转载 作者:行者123 更新时间:2023-12-03 14:47:42 26 4
gpt4 key购买 nike

我们每 7 天对我们的 Lucene 索引和增量索引每 2 小时左右运行一次完整的重新索引(即从头开始创建索引)。我们的索引有大约 700,000 个文档,一个完整的索引需要大约 17 个小时(这不是问题)。

当我们做增量索引时,我们只索引过去两个小时内发生变化的内容,所以花费的时间要少得多——大约半小时。但是,我们已经注意到,大部分时间(可能是 10 分钟)都花在了运行 IndexWriter.optimize() 方法上。

LuceneFAQ提到:

The IndexWriter class supports an optimize() method that compacts the index database and speeds up queries. You may want to use this method after performing a complete indexing of your document set or after incremental updates of the index. If your incremental update adds documents frequently, you want to perform the optimization only once in a while to avoid the extra overhead of the optimization.



...但这似乎并没有对“经常”的含义给出任何定义。优化是 CPU 密集型和非常 IO 密集型的,所以如果我们可以逃脱它,我们宁愿不这样做。在未优化的索引上运行查询的影响有多大(我特别在考虑完全重新索引后的查询性能与 20 个增量索引(例如 50,000 个文档已更改)后的查询性能相比)?我们应该在每个增量索引之后进行优化还是性能损失不值得?

最佳答案

Mat,由于您似乎很清楚当前流程需要多长时间,我建议您删除 optimize()并衡量影响。

在这 2 小时的窗口中,是否有许多文件发生了变化?如果只有一小部分(50,000/700,000 约为 7%)被增量重新索引,那么我认为您从 optimize() 中获得的值(value)不大。 .

一些想法:

  • 不要做增量optimize()根本。我的经验表明,无论如何您都没有看到巨大的查询改进。
  • optimize()每天而不是 2 小时一次。
  • optimize()在低音量时间(这就是 javadoc 所说的)。

  • 并确保您进行测量。没有它们,这些类型的变化可能是一蹴而就的。

    关于optimization - Lucene中的增量索引之后应该优化索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/119994/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com