1

QueryEJB を使用してネットワーク経由などで Lucene 要素を含むクラスを送信する必要があり、もちろんこのクラスをシリアル化する必要があります。私は自分のクラスを次のようにマークしましSerializableたが、それでは十分ではないようです:

org.apache.lucene.search.TermQuery is not Serializable

実際、Lucene (4.0) の最後の安定版リリースの javadoc を読むと、TermQuerySerializable も実装していないことがわかりQueryます。私が理解できないのは、これらのクラスSerializableが前回のリリース (3.6.1) で実装されていた理由と、そうでなくなった理由です。

4

1 に答える 1

5

Lucene の寄稿者の 1 人であり、Lucene 4 の変更ログである Mike McCandless は次のように述べています。

すべてのシリアル化コードが Lucene のクラスから削除されました。アプリケーションの上位レベルでシリアル化を処理する必要があります。

実際のコミットは、JIRA の問題LUCENE-2908およびLUCENE-4037に対して行われました。前号の説明には次のように書かれています。

contrib/remote を削除しましたが、あらゆる場所でシリアライゼーション ヘルをクリーンアップするのを忘れていました。これはもはや必要ではなく、実際には機能せず (バージョン間など)、開発が遅くなります (たとえば、スコアリング システムのパッチを作成しようとしたときに、Similarity.idfExplain の愚かなシリアル化をデバッグするのに長い時間を無駄にしました)。

連載をやめようと考えているのはルセンだけではない。たとえば、グアバもこれを考慮しました。

あなたの問題について言えば、いつでもクエリを文字列表現に変換し(を使用して.toString())、元に戻すことができるはずです。これを 1 秒間に何百万回も行わない限り、オーバーヘッドは無視できるはずです。

于 2012-12-04T10:20:14.340 に答える