[英]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代碼,您傳遞給Field
的Reader
最終會傳遞給對您的數據進行標記化的TokenStream
(即在DocInverterPerField
)。 因此,您的計划肯定會節省內存,因為它會直接從該讀取器中流式傳輸以進行索引。 您可能想在FileReader
之上使用BufferedReader
以獲得更好的性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.