2011-06-02 2 views
1

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

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

ответ

3

Если ваши документы не слишком велики, сначала прочитайте их в памяти, а затем укажите результирующее значение в виде строки при добавлении нового поля. Если документы большие, разделите их на управляемые куски и выполните описанную выше операцию на каждом фрагменте. Обязательно используйте одно и то же имя поля для каждого фрагмента, чтобы 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 будет автоматически объединить значения, указанные в каждой надстройке с таким же названием поля, так что он может произвести поиск по объединенному набору.

+0

Но разве я не стану проблемой, когда хочу показать кешированную копию или хочу сделать выделение? Когда вы говорите, держите одно и то же имя поля, что вы подразумеваете под этим? Создайте несколько полей с тем же «именем» и добавьте их в документы? – Sap

+0

@sapan Я добавил несколько примеров кода в ответ выше. –

+0

Большое спасибо, кажется, работает. – Sap

 Смежные вопросы

  • Нет связанных вопросов^_^