Lucene.Net 3.0.5 - 近实时搜索,重新打开 reader 性能
Lucene.Net 3.0.5 - Near Real Time Search, reopening reader performance
我正在使用 IndexWriter 为一系列文档编制索引,并在迭代结束时提交更改。
为了访问未提交的更改,我正在使用 NRTS here
想象一下,我正在为 1000 个文档编制索引并遍历它们以检查是否有任何我可以 reuse/update。 (我有一些具体要求)
我在每次迭代时重新打开 reader:
using (var indexReader = writer.GetReader())
using (var searcher = new IndexSearcher(indexReader))
重新打开 reader 应该多慢?一旦索引达到大约 300K 个文档,有时,索引 1000 个文档可能需要大约 60 秒(文本不多)
我是不是采取了错误的方法?请指教
要提高性能,您不需要经常优化。
我使用单独的计时器进行优化。每 40 分钟,它会启用对五个段的优化(根据 "Lucene In Action",这是一个很好的值),如果索引器为 运行(如果索引器关闭,则无需优化),则会发生这种情况。然后,每天一次,它可以在一天中非常低的使用时间对一个段进行优化。 one-segment 优化通常需要 5 分钟左右。随意借用我的策略,但无论如何,不要经常优化 - 你的优化会损害你的整体索引率,特别是考虑到你的文档大小很小,所以 500 文档迭代循环必须经常发生。
您还可以在各个阶段放入一些临时日志记录代码,以查看您的索引器将时间花在哪里,这样您就可以调整迭代大小、循环之间的稳定时间(如果您像我一样偏执)、优化频率等
我正在使用 IndexWriter 为一系列文档编制索引,并在迭代结束时提交更改。
为了访问未提交的更改,我正在使用 NRTS here
想象一下,我正在为 1000 个文档编制索引并遍历它们以检查是否有任何我可以 reuse/update。 (我有一些具体要求)
我在每次迭代时重新打开 reader:
using (var indexReader = writer.GetReader())
using (var searcher = new IndexSearcher(indexReader))
重新打开 reader 应该多慢?一旦索引达到大约 300K 个文档,有时,索引 1000 个文档可能需要大约 60 秒(文本不多)
我是不是采取了错误的方法?请指教
要提高性能,您不需要经常优化。
我使用单独的计时器进行优化。每 40 分钟,它会启用对五个段的优化(根据 "Lucene In Action",这是一个很好的值),如果索引器为 运行(如果索引器关闭,则无需优化),则会发生这种情况。然后,每天一次,它可以在一天中非常低的使用时间对一个段进行优化。 one-segment 优化通常需要 5 分钟左右。随意借用我的策略,但无论如何,不要经常优化 - 你的优化会损害你的整体索引率,特别是考虑到你的文档大小很小,所以 500 文档迭代循环必须经常发生。
您还可以在各个阶段放入一些临时日志记录代码,以查看您的索引器将时间花在哪里,这样您就可以调整迭代大小、循环之间的稳定时间(如果您像我一样偏执)、优化频率等