我需要Query使用EJB通过网络发送包含Lucene元素的类,例如,该类当然需要序列化。我将班级标记为,Serializable但似乎还不够:
Query
Serializable
org.apache.lucene.search.TermQuery is not Serializable
确实,当我阅读Lucene(4.0)的最新稳定版本的javadoc时,我可以看到它TermQuery也没有实现Serializable Query。我不明白的是为什么这些类通常Serializable在上一发行版(3.6.1)中实现,为什么不再如此呢?
TermQuery
Lucene的贡献者之一以及Lucene 4 changelog的Mike McCandless说:
所有序列化代码已从Lucene的类中删除;您必须在应用程序的更高级别上处理序列化。
实际提交是针对JIRA问题LUCENE-2908和LUCENE-4037进行的。前一个问题的描述是:
我们删除了contrib / remote,但是却忘记了到处清理序列化地狱。不再需要它,也从未真正使用过(例如,跨版本),并且减慢了开发速度(例如,在尝试为计分系统打补丁时,我浪费了很长时间调试傻瓜化的Sametime.idfExplain序列化)。
并非只有Lucene在考虑放弃序列化。例如,番石榴也考虑了这一点。
说到您的问题-您应该能够始终将查询转换为String表示形式(使用.toString())并返回。除非您每秒进行百万次操作,否则开销应该可以忽略不计。
.toString()