2009-08-05 23 views
0

luceneインデックスからバイナリブロックを読み込み中にjava.io.EOFExceptionが発生しました。私は、luceneインデックスフィールドにバイト配列としてjavaオブジェクトを格納していて、ヒットしたときにそれを読み取っています。 java.io.ObjectInputStream $ BlockDataInputStream.readShortでjava.io.ObjectInputStream $ PeekInputStream.readFully(ObjectInputStream.java:2281)でjava.io.EOFException :バイナリブロックの読み込み中にLuceneエラーが発生しました:java.io.EOFException

によって引き起こさ:ここ

は、スタックトレースです(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)

私はバックグラウンドを持っています索引に書き込むスレッド。しかし、私はそれらをバッファリングし、1000のように一度に書きます。インデックス上でoptimize()を発行することもあります。私が書くとき、私はIndexReaderを再開しています。これは、IndexReaderの再開呼び出しのために起こっていますか?

ありがとうございました。

よろしく Tushar

+0

背景の詳細​​をご記入ください。 Luceneは、ドキュメントを格納し、テキストクエリに従ってそれらを取得するために計画されています。あなたは何か他のことをしているようです。また、テラコッタを使用します - これは分散インデックスですか?これは非常に重要です。インデックスの作成方法とクエリの外観を指定してください。 –

答えて

0

それはLuceneのを直接行うには何を持っているようにこれは見ていません。むしろ、例外はテラコッタモジュールで発生します。どうやら、それはおそらくあなたのJavaファイルをシリアライズの過程にあります。私はterracottaのこのモジュールのためのjavadocを見つけることができませんが、ストリームのストリームの長さがシリアライザに間違って指定されていることがスタックトレースからわかります。

Yuval Fが指摘しているように、luceneはバイナリコンテンツの処理を目的としていません。これは記憶機構ではなく、そのように使用すべきではありません。 luceneからバイトコードの正しいシリアル化されたバージョンを得ることに頼ることはできません。

関連する問題