Lucene.Net 3.0.5 - 近实时搜索,重新打开阅读器性能

时间:2016-01-05 21:19:42

标签: lucene lucene.net

我正在使用IndexWriter索引一系列文档,并在迭代结束时提交更改。

为了访问未提交的更改,我使用了here

所述的NRTS

想象一下,我正在索引1000个文档并对它们进行迭代以检查是否有任何我可以重用/更新的文档。 (我有一些具体要求)

我在每次迭代时重新打开读者:

    using (var indexReader = writer.GetReader())
    using (var searcher = new IndexSearcher(indexReader))

重新打开阅读器的速度有多慢?一旦索引达到大约300K文档,有时,索引1000个文档可能需要大约60秒(文本不多)

我采取了错误的做法吗?请指教。

1 个答案:

答案 0 :(得分:1)

要提高效果,您需要不要经常优化。

我使用单独的计时器进行优化。每隔40分钟,它就可以优化到五个段(根据“Lucene In Action”,这是一个很好的值),如果索引器正在运行(如果索引器关闭则无需优化)。然后,每天一次,它可以在一天的非常低的使用时间内对一个段进行优化。我通常会看到大约5分钟的单段优化。随意借用我的策略,但无论如何,不​​要经常优化 - 您的优化会损害您的整体索引率,特别是考虑到您的文档大小很小,因此必须经常发生500 doc迭代循环。 / p>

您还可以在各个阶段输入一些临时日志代码,以查看您的索引器花费时间的位置,以便您可以调整迭代大小,在循环之间设置时间(如果您像我一样偏执),优化频率等