现在,我在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读入内存?
答案 0 :(得分:1)
java.io.Reader实现旨在通过将部分流读入内存来有效地读取字符流。 (请参阅read(char[] cbuf) API。)所以我说“是”,使用Reader可以减少内存开销
答案 1 :(得分:0)
通过Lucene代码,您传递到Reader
的{{1}}最终会传递给Field
,这会标记您的数据(即TokenStream
)。因此,您的计划应该绝对节省内存,因为它将直接从该读取器流式传输以进行索引。您希望在DocInverterPerField
之上使用BufferedReader
以获得更好的效果。