我正在尝试创建大约 200 万条记录的 lucene。索引时间约为 9 小时。您能否建议如何提高性能?
4 回答
我写了一篇关于如何并行化 Lucene 索引的糟糕文章。它写得真的很糟糕,但你会在这里找到它(你可能想看看一些示例代码)。
无论如何,主要思想是将数据分成相当大的块,然后在单独的线程上处理这些块中的每一个。当每个部分都完成后,您将它们全部合并到一个索引中。
使用上述方法,我可以索引大约 4+ 百万条记录。2小时。
希望这能让你知道从这里去哪里。
除了写入方面(合并因素)和计算方面(并行化),这有时是由于最简单的原因:输入缓慢。许多人从数据数据库中构建 Lucene 索引。有时您会发现对该数据的特定查询太复杂且太慢,无法快速返回所有(200 万?)记录。只尝试查询并写入磁盘,如果它仍然在 5-9 小时左右,那么您已经找到了一个可以优化的地方(SQL)。
当我需要加快速度时,以下文章确实对我有所帮助:
http://wiki.apache.org/lucene-java/ImproveIndexingSpeed
我发现文档构建是我们的主要瓶颈。在优化数据访问并实施其他一些建议后,我能够显着提高索引性能。
提高 Lucene 的索引性能最简单的方法是调整 IndexWriter 的 mergeFactor 实例变量的值。该值告诉 Lucene 在将它们写入磁盘之前要在内存中存储多少文档,以及将多个段合并在一起的频率。
http://search-lucene.blogspot.com/2008/08/indexing-speed-factors.html