2009-08-05 5 views
0

Я получаю java.io.EOFException при чтении двоичного блока из индекса lucene. Я сохраняю java-объект в качестве байтового массива в поле индекса lucene и читаю его, когда происходит сбой.Ошибка Lucene при чтении двоичного блока: java.io.EOFException

Вот трассировки стека:

Вызванный: java.io.EOFException в java.io.ObjectInputStream $ PeekInputStream.readFully (ObjectInputStream.java:2281) в java.io.ObjectInputStream $ BlockDataInputStream.readShort (ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader (ObjectInputStream.java:780) at java.io.ObjectInputStream. (ObjectInputStream.java:280) at org.terracotta.modules.searchable.util. SerializationUtil $ OIS. (SerializationUtil.java:20)

У меня есть некоторый backgr ound, которые записываются в индекс. Но я их буферизую, а затем пишу их сразу, как 1000. Иногда я также выдаю optimize() для индекса. Когда я пишу, я снова открываю IndexReader. Это происходит из-за повторного открытия вызова IndexReader?

Спасибо.

С уважением Tushar

+0

Просьба указать некоторые детали фона. Lucene планируется для хранения документов и получения их в соответствии с текстовыми запросами. Кажется, ты что-то делаешь. Кроме того, вы используете терракоту - это распределенный индекс? Это может быть очень значительным. Не могли бы вы указать, как вы построили индекс и как выглядит запрос? –

ответ

0

Это не похоже, что это не имеет ничего общего непосредственно Lucene. Скорее, исключение происходит в терракотовом модуле. По-видимому, пока он находится в процессе сериализации, возможно, сериализует ваши java-файлы. Я не могу найти javadocs для этого модуля терракоты, но мне кажется из трассировки стека, что длина потока потоков некорректно указана в сериализаторе.

Как указывает Юваль Ф.: lucene не предназначен для обработки двоичного содержимого. Он не является механизмом хранения и не должен использоваться как таковой. Вы не можете положиться на правильную сериализованную версию вашего байт-кода обратно из lucene.

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