уменьшение использования памяти при индексации документа Lucene - PullRequest
0 голосов
/ 20 апреля 2011

Прямо сейчас мои документы в lucene могут иметь очень очень большие значения в одном поле (от 0 до сотен МБ).

Я использую 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 рано или поздно будет считан в память?

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

java.io.Reader реализации были разработаны для эффективного чтения символьных потоков путем считывания частей потока в память.(См. read (char [] cbuf) API.) Поэтому я бы сказал «да», использование Reader уменьшило бы ваши накладные расходы

0 голосов
/ 20 апреля 2011

Просматривая код Lucene, Reader, который вы передаете в Field, в конечном итоге передается в TokenStream, который токенизирует ваши данные (а именно в DocInverterPerField). Таким образом, ваш план должен обязательно сэкономить память, поскольку он будет выполнять потоковую передачу непосредственно из этого считывателя для выполнения индексации. Вам захочется использовать BufferedReader поверх FileReader для повышения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...