Lucene.net优化未完成的循环
我正在使用Lucene.net 2.9.1版,在调用Optimize时遇到以下问题: 我注意到,一些优化调用可能需要几个小时,而当这需要很长的时间时,索引和优化的过程是无法完成的。 当我使用源代码时,我成功地跟踪了问题:导致这种行为的调用是Lucene.net优化未完成的循环,.net,lucene.net,.net,Lucene.net,我正在使用Lucene.net 2.9.1版,在调用Optimize时遇到以下问题: 我注意到,一些优化调用可能需要几个小时,而当这需要很长的时间时,索引和优化的过程是无法完成的。 当我使用源代码时,我成功地跟踪了问题:导致这种行为的调用是Optimize(int-maxNumSegments,bool-doWait)——在这个方法中,有对optimizemergespensing()的重复调用,它们总是返回true,循环继续工作并调用此方法,直到此调用返回,否则可能需要很长时间 这引发了以下问
Optimize(int-maxNumSegments,bool-doWait)
——在这个方法中,有对optimizemergespensing()
的重复调用,它们总是返回true,循环继续工作并调用此方法,直到此调用返回,否则可能需要很长时间
这引发了以下问题:1.什么会导致
优化合并支出()
保持返回true?2.什么会导致终止索引和优化的流程失败?
3.你知道更新版本的Lucene.net是否面临同样的行为吗 感谢声明它将返回true“如果pendingMerges或runningMerges中的任何合并都是优化合并”。它只会等待一秒钟,以避免出现某些通知可能无法触发的问题,这取决于调用方重新评估等待条件。我已链接到2.9.4g源代码,因此较新版本也包含此行为 一个不可修改的进程是一个操作系统问题,只要它没有在内核/系统调用中被阻塞,您应该始终能够杀死它。我们需要查看进程转储来调试这些问题。(或者更好地解释您是如何试图终止流程的…) 反问题
IndexWriter.Optimize
?Lucene可以处理几个段,事实上,当只有几个段发生更改时,重新打开索引比重新打开包含整个索引的全新段更容易。如果当前对段的处理有问题,您可以编写自己的MergePolicy
,Lucene.Net目前落后于此(目前已达到3.0.3,4.x的移植正在进行中)IndexWriter.Optimize()
,这将导致不必要的cpu和io负载,无论是在实际合并期间还是在重新打开读卡器时IndexWriter.Optimize
?Lucene可以处理几个段,事实上,当只有几个段发生更改时,重新打开索引比重新打开包含整个索引的全新段更容易。如果当前对段的处理有问题,您可以编写自己的MergePolicy
,Lucene.Net目前落后于此(目前已达到3.0.3,4.x的移植正在进行中)IndexWriter.Optimize()
,这将导致不必要的cpu和io负载,无论是在实际合并期间还是在重新打开读卡器时