簡體   English   中英

減少索引Lucene文檔的內存使用量

[英]decreasing memory usage of indexing a Lucene document

現在,我在Lucene中的文檔在一個字段中可以具有非常大的值(從0到數百MB)。

我正在使用Lucene 3.1.0,我創建這樣的文檔:

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

其中VERYLARGEVALUE是內存中的字符串。 我在想,也許在創建文件時將VERYLARGEVALUE寫入文件中(它是通過從許多來源提取文本來創建的,因此它是增量的),然后使用:

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

讀者從我寫VERYLARGEVALUE的文件中讀取的位置。

這會減少內存需求,還是早晚將VERYLARGEVALUE最終讀入內存?

java.io.Reader實現旨在通過將字符流的某些部分讀入內存來有效地讀取字符流。 (請參閱read(char [] cbuf) API。)因此,我想說“是”,使用Reader會減少您的內存開銷

通過Lucene代碼,您傳遞給FieldReader最終會傳遞給對您的數據進行標記化的TokenStream (即在DocInverterPerField )。 因此,您的計划肯定會節省內存,因為它會直接從該讀取器中流式傳輸以進行索引。 您可能想在FileReader之上使用BufferedReader以獲得更好的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM