1

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

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

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

4

1 回答 1

5

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

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

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

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

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

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

于 2012-12-04T10:20:14.340 回答