[infinispan-dev] Indexing for remote query

Adrian Nistor anistor at redhat.com
Wed Sep 4 07:01:53 EDT 2013


Hi devs,

Currently remote caches have byte[] values. With the introduction of 
remote query these byte arrays are no longer opaque for search-enabled 
caches, they are Protobuf encoded and their schema is known and we have 
to somehow help hibernate-search extract the indexable data and index 
it. As a side note, the indexing for embedded mode is done by 
QueryInterceptor which relies on hibernate-search annotated cache 
values. This definitely does not work directly for byte[].

One option is to write another interceptor similar to QueryInterceptor 
but capable of making sense of the byte[], but that would duplicate 
functionality (and maintenance) and would have to use Lucene directly 
because in order to use hibernate-search you would need annotations on 
your entities. And if we go this route we might need to also duplicate 
MassIndexer.

A second more preferable option is to wrap the byte[] values into a 
hsearch FieldBridge or ClassBridge annotated entity so we can continue 
to use existing QueryInterceptor. This was implemented in the PR [1], 
the wrapping entity being 
org.infinispan.query.remote.indexing.ProtobufValueWrapper and the place 
where the wrapping happens is a new interceptor, 
org.infinispan.query.remote.indexing.RemoteValueWrapperInterceptor. 
RemoteValueWrapperInterceptor uses a mechanism similar to 
TypeConverterInterceptor (of compat mode), so a common base class was 
extracted for them.

The wrapping approach has received favourable review so far. But I'm 
asking myself (and you) maybe there's an even simpler solution that I've 
overlooked? Or maybe we can do the wrapping somehow without introducing 
a new interceptor?

Thanks!

[1] https://github.com/infinispan/infinispan/pull/2022


More information about the infinispan-dev mailing list