减少索引Lucene文档的内存使用量

时间:2011-04-20 09:33:56

标签: java memory lucene

现在,我在lucene中的文档在一个字段中可以有非常大的值(从0到数百MB)。

我正在使用Lucene 3.1.0,我创建了这样的文档:

doc = new Document();
Field field = new Field(fieldname, VERYLARGEVALUE, store, tokenize, storevector);
doc.add(field);

其中VERYLARGEVALUE是内存中的String。我想也许可以在创建文件时将VERYLARGEVALUE写入文件(它是通过从多个源中提取文本创建的,因此它是增量文件),然后使用:

Field field = Field(String name, Reader reader, Field.TermVector termVector); 
doc.add(field);

读者从文件中读取我写的VERYLARGEVALUE。

这会降低内存需求还是最迟会将VERYLARGEVALUE读入内存?

2 个答案:

答案 0 :(得分:1)

java.io.Reader实现旨在通过将部分流读入内存来有效地读取字符流。 (请参阅read(char[] cbuf) API。)所以我说“是”,使用Reader可以减少内存开销

答案 1 :(得分:0)

通过Lucene代码,您传递到Reader的{​​{1}}最终会传递给Field,这会标记您的数据(即TokenStream)。因此,您的计划应该绝对节省内存,因为它将直接从该读取器流式传输以进行索引。您希望在DocInverterPerField之上使用BufferedReader以获得更好的效果。