我的索引目前占用大约1GB的空间,并且有大约250万个文档。索引存储在固态驱动器上以提高速度。我一次添加2500个文档,并在添加每个批次后提交。索引是一个“实时”索引,需要在白天和晚上保持最新,因此最小化写入速度非常重要。我使用合并系数10并且从不调用Optimize()
,而是根据合并因子允许索引根据需要优化自身。
我需要在添加每个批处理后提交文档,因为我记录了这个事实,这样如果应用程序崩溃或重新启动,它就可以从中断的地方继续。如果我没有提交,则存储的状态将与索引中的内容不一致。我假设如果编写者在没有提交的情况下被销毁,我的添加,删除和更新都会丢失。
无论如何,我注意到在经过一段任意时间(可能是两分钟或两小时)和一些可变数量的先前提交之后,索引器似乎停在IndexWriter.AddDocument(doc)
方法而且我不能为我的生活弄清楚为什么它停滞或如何解决它。该块可以保留两个小时以上,对于索引在数百万个文档中占用不到2GB并且使用SSD驱动器而言,这似乎很奇怪。
什么可能导致AddDocument阻止?是否有任何可以帮助我的Lucene诊断工具?我还能找到什么来追查问题?
答案 0 :(得分:1)
您可以使用IndexWriter.SetInfoStream()将诊断输出重定向到可能会给您一些错误提示的流。