我正在使用IndexWriter索引一系列文档,并在迭代结束时提交更改。
为了访问未提交的更改,我使用了here
所述的NRTS想象一下,我正在索引1000个文档并对它们进行迭代以检查是否有任何我可以重用/更新的文档。 (我有一些具体要求)
我在每次迭代时重新打开读者:
using (var indexReader = writer.GetReader())
using (var searcher = new IndexSearcher(indexReader))
重新打开阅读器的速度有多慢?一旦索引达到大约300K文档,有时,索引1000个文档可能需要大约60秒(文本不多)
我采取了错误的做法吗?请指教。
答案 0 :(得分:1)
要提高效果,您需要不要经常优化。
我使用单独的计时器进行优化。每隔40分钟,它就可以优化到五个段(根据“Lucene In Action”,这是一个很好的值),如果索引器正在运行(如果索引器关闭则无需优化)。然后,每天一次,它可以在一天的非常低的使用时间内对一个段进行优化。我通常会看到大约5分钟的单段优化。随意借用我的策略,但无论如何,不要经常优化 - 您的优化会损害您的整体索引率,特别是考虑到您的文档大小很小,因此必须经常发生500 doc迭代循环。 / p>
您还可以在各个阶段输入一些临时日志代码,以查看您的索引器花费时间的位置,以便您可以调整迭代大小,在循环之间设置时间(如果您像我一样偏执),优化频率等