Why Query, TermQuery etc. are not longer implement

2019-03-03 20:46发布

I need to send a class containing Lucene elements such as Query over the network using EJB and of course this class need to be serialized. I marked my class as Serializable but it does not seems to be enough:

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

Indeed, when i read the javadoc of the last stable release of Lucene (4.0), i can see that TermQuery does not implement Serializable, Query neither. What i don't understand is why those classes used to implement Serializable in the last release (3.6.1), and why it's no longer the case?

1条回答
在下西门庆
2楼-- · 2019-03-03 21:20

Mike McCandless, one of Lucene contributors as well as Lucene 4 changelog say:

All serialization code has been removed from Lucene's classes; you must handle serialization at a higher level in your application.

The actual commits were done against JIRA issues LUCENE-2908 and LUCENE-4037. The description of the former issue says:

We removed contrib/remote, but forgot to cleanup serialization hell everywhere. this is no longer needed, never really worked (e.g. across versions), and slows development (e.g. i wasted a long time debugging stupid serialization of Similarity.idfExplain when trying to make a patch for the scoring system).

Lucene is not alone thinking about throwing away serialization. For example, guava considered this, too.

Speaking about your problem - you should be able to always convert your query to a String representation (using .toString()) and back. Unless you do this million times a second, the overhead should be negligible.

查看更多
登录 后发表回答