2

我有一个 Lucene 索引,其中包含来自 1740 本书的 50571 个文档。我有两个创建此索引的进程。第一个过程是逐个文档在设备上创建索引。这个过程非常缓慢。另一个过程是在服务器上创建图书索引(与我在设备上创建它的方式完全相同)并下载并将其与主索引合并。这个创建主索引要快得多。无论哪种方式,创建索引都可以正常工作。

问题是当我在下载合并索引上搜索时,我得到一个OutOfMemoryException,但是当我使用在设备上创建的索引进行搜索时,我没有得到那个错误。我逐本书(下载合并)浏览并创建索引书,并在每本书被索引后进行搜索;基于此,当我预订约 450 美元时,我开始获得OutOfMemoryException.

是什么导致我内存不足。

4

1 回答 1

2

Lucene 是一个记忆猪。当将“合并”索引一起写入时,它将整个索引集存储在内存中两次。正如从 lucene文档中引用的那样。

请注意,这需要目录中的临时可用空间最多为所有输入索引(包括起始索引)总和的 2 倍。如果读取器/搜索器针对起始索引打开,则所需的临时可用空间将高于起始索引的大小

那是很多记忆。为了缓解这种情况,我们必须通过调用索引编写器来缩小索引的大小forceMerge(int)。这是一个缓慢的过程,但它确实缩小了索引的大小。1每次索引目录中有 50 个或更多文件时,我都会用一个参数来调用它。

于 2012-09-17T19:55:57.710 回答