We use Kryo to pass query objects between hosts:

https://github.com/EsotericSoftware/kryo

We initially had some trouble with it creating dynamic classes and running out 
of PermGen space but we got around that using an ObjectPool:

http://commons.apache.org/proper/commons-pool/api-1.6/org/apache/commons/pool/impl/StackObjectPool.html

I've not looked at the project recently, we're using version 2.21 and there's a 
3.0.0 now, so they may have solved the issues we had and made things nicer, but 
here's how we're doing it with 2.21:

To serialize:

static private ObjectPool<Kryo> pool = new StackObjectPool<Kryo>(new 
KryoFactory(), 75, 75);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
Output output = new Output(baos);
kryo = pool.borrowObject();
kryo.writeClassAndObject(output, query);
pool.returnObject(kryo);
output.close();
String base64EncodedSerializedObject = Base64.encodeBytes(baos.toByteArray());

Where query is a Lucene Query object (I've left out the error handling for 
brevity).

To deserialize:

ByteArrayInputStream bais = new 
ByteArrayInputStream(Base64.decode(encodedQuery));
Input input = new Input(bais);
kryo = pool.borrowObject();
deserializedQueryObject = (Query) kryo.readClassAndObject(input);
pool.returnObject(kryo);
input.close();

Hope that might help.

Jim

________________________________________
From: Bauer, Herbert S. (Scott) <bauer.sc...@mayo.edu>
Sent: 18 March 2016 10:02
To: java-user@lucene.apache.org
Subject: Serializing Queries

Has anyone in this group solved the problem of serializing complex boolean 
queries (Some of our clauses have span and other query types)?  Our Java RMI 
depends upon being able to do so.   I have seen posts that say you can just 
parse the string representation but apparently that only works on simple query 
representations.     I’m looking at the CoreParser and it’s supporting xml 
parsing capabilities with an eye toward Marshalling the boolean query into a 
DOM object and unmarshalling it on the server side using some of the support 
implied by the CoreParser and related classes.  -scott
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to