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



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

为了访问未提交的更改,我将使用此处所述的NRTS

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

我在每次迭代时都会重新打开阅读器:

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

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

我是不是走错了路?请告知。

为了提高性能,您不需要经常进行优化。

我使用单独的定时器进行优化。每40分钟,它就可以优化到五个段(根据"Lucene In Action",这是一个很好的值),然后在索引器运行时发生(如果索引器关闭,则无需优化)。然后,每天一次,它可以在一天中使用率很低的时间对一个分段进行优化。我通常会看到大约5分钟的一段优化。可以借用我的策略,但无论如何,不要经常优化——你的优化会损害你的整体索引率,尤其是考虑到你的文档大小很小,因此500文档迭代循环一定会频繁发生。

您还可以在各个阶段放入一些临时日志代码,以查看索引器在哪里花费时间,这样您就可以调整迭代大小、循环之间的结算时间(如果您像我一样偏执)、优化频率等。

最新更新