为什么 Query、TermQuery 等不再在 Lucene 4.0 中实现 Serializable?

nat*_*han 1 java lucene serialization

我需要Query使用 EJB 通过网络发送一个包含 Lucene 元素的类,当然这个类需要被序列化。我将我的班级标记为,Serializable但似乎还不够:

org.apache.lucene.search.TermQuery is not Serializable
Run Code Online (Sandbox Code Playgroud)

事实上,当我阅读 Lucene (4.0) 的最后一个稳定版本的 javadoc 时,我可以看到TermQuery它没有实现 Serializable,Query也没有。我不明白的是为什么这些类曾经Serializable在上一个版本(3.6.1)中实现,为什么不再如此?

min*_*das 5

Mike McCandless,Lucene 贡献者之一以及 Lucene 4 更新日志说:

所有序列化代码已从 Lucene 的类中删除;您必须在应用程序的更高级别处理序列化。

实际提交是针对 JIRA 问题LUCENE-2908LUCENE-4037 完成的。前一个问题的描述说:

我们删除了 contrib/remote,但忘记清理无处不在的序列化地狱。这不再需要,从来没有真正起作用(例如跨版本),并且减慢了开发速度(例如,当我试图为评分系统制作补丁时,我浪费了很长时间调试 Similarity.idfExplain 的愚蠢序列化)。

Lucene 并不是唯一一个考虑抛弃序列化的人。例如,番石榴也考虑到了这一点。

谈到您的问题 - 您应该能够始终将您的查询转换为字符串表示(使用.toString())并返回。除非您每秒执行此操作数百万次,否则开销应该可以忽略不计。