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



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

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

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

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

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

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

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

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

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

最新更新