小编典典

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

java

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

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

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


阅读 291

收藏
2020-11-30

共1个答案

小编典典

Lucene的贡献者之一以及Lucene 4 changelog的Mike
McCandless
说:

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

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

我们删除了contrib /
remote,但是却忘记了到处清理序列化地狱。不再需要它,也从未真正使用过(例如,跨版本),并且减慢了开发速度(例如,在尝试为计分系统打补丁时,我浪费了很长时间调试傻瓜化的Sametime.idfExplain序列化)。

并非只有Lucene在考虑放弃序列化。例如,番石榴也考虑了这一点。

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

2020-11-30