2012-12-04 36 views
0

我需要通過使用EJB的網絡發送包含Lucene元素的類,如Query,當然這個類需要被序列化。我標誌着我班級爲Serializable但它似乎並不足夠:爲什麼Query,TermQuery等不再在Lucene 4.0中實現Serializable?

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

事實上,當我讀到的Lucene的最新穩定版本(4.0)的javadoc的,我可以看到,TermQuery沒有實現Serializable, Query都不是。我不明白的是爲什麼這些類在上一版本(3.6.1)中用於實現Serializable,爲什麼它不再是這種情況?

+0

你問的地方不對。試試Lucene郵件列表。 – EJP

回答

4

Mike McCandless, one of Lucene contributors以及Lucene的4更新日誌說:

所有序列碼已經從Lucene的類刪除;您的 必須在應用程序的更高級別處理序列化。

實際提交是針對JIRA問題LUCENE-2908LUCENE-4037完成的。前面的問題說明如下:

我們刪除了contrib/remote,但忘了清理序列化地獄 無處不在。這不再需要,從來沒有真正的工作(例如跨 版本),並減緩發展(努力使 補丁的評分系統時,如我浪費Similarity.idfExplain的很長一段時間的調試 愚蠢的序列化)。

Lucene是不是扔掉系列化獨自思考。例如,番石榴considered這也是。

說到你的問題 - 你應該始終能夠將查詢轉換爲字符串表示(使用.toString())並返回。除非你每秒鐘做這麼多次,否則開銷應該可以忽略不計。

+0

我終於找到了這個更改日誌。謝謝。 – nathan

+0

@mindas,我知道BooleanQuery.toString(),有沒有辦法將該字符串轉換回布爾查詢或查詢對象?你能指點我的API或例子嗎? 基本上,我創建了打印爲+名BooleanQuery:阿倫和+最喜歡的:計算器,有沒有一種方法來轉換這回查詢對象? –

+0

@ArunBC當然,只需使用'QueryParser' - 餵你的查詢字符串,你應該得到相同的查詢對象。 – mindas

相關問題