Anyways создания поля Lucene, хранящегося и передаваемого через ридер - PullRequest
1 голос
/ 02 июня 2011

Есть ли способ создания поля в Lucene, которое может принимать ридер или InputStream, а также сохранять его содержимое? Я хочу сохранить данные, чтобы их можно было использовать во время выделения, и я хочу потоковую передачу данных, потому что содержимое документов может быть очень большим.

Я не вижу конструктора для поля, которое позволяет мне использовать ридер, а также позволяет сохранять значение. Спасибо

1 Ответ

3 голосов
/ 04 июня 2011

Если ваши документы не слишком большие, просто сначала прочитайте их в память, а затем укажите результирующее значение в виде строки при добавлении нового поля.Если документы большие, разбейте их на управляемые фрагменты и выполните описанную выше операцию для каждого фрагмента.Убедитесь, что вы используете одно и то же имя поля для каждого чанка, чтобы Lucene выполнял поиск по всем значениям.

Пример:

IndexWriter writer = ...
String id = ...
String[] lines = ...
Document doc = new Document();
doc.add(new Field("id", id, Store.YES, Index.NOT_ANALYZED, TermVector.NO );
for (String line: lines) {
    doc.add(new Field("text", line, Store.YES, Index.ANALYZED, TermVector.WITH_POSITIONS);
}
writer.addDocument(doc);

Lucene автоматически объединит значения, указанные при каждом добавлении,то же имя поля, чтобы он мог выполнять поиск по объединенному набору.

...