2011-06-04 24 views
6

estoy tengo un esquema con Solr campo dinámico de diferentes tipos en, por ejemplo en el schema.xml hay:SolrJ y dinámico campos

<dynamicField name="*_s" type="string" indexed="true" stored="true"/> 
<dynamicField name="*_i" type="int" indexed="true" stored="true"/> 
<dynamicField name="*_l" type="long" indexed="true" stored="true"/> 
<dynamicField name="*_f" type="float" indexed="true" stored="true"/> 
<dynamicField name="*_d" type="double" indexed="true" stored="true"/> 

y quiero acceder a estos campos utilizando un POJO anotada SolrJ . Sé que puedo tener diferentes referencias del mapa para cada tipo de datos en el POJO como esto:

... 
@Field("*_s") 
public Map<String, String> strings; 

@Field("*_i") 
public Map<String, Integer> integers; 
... 

Pero es posible tener todos los campos dinámicos almacenados en el mismo mapa? Estaba pensando en algo como:

... 
@Field("*_s") 
@Field("*_i") 
public Map<String, Object> dynamicFields; 
... 

La única documentación que puedo encontrar sobre SolrJ, POJOs y campos dinámicos es una vieja solicitud de función: https://issues.apache.org/jira/browse/SOLR-1129

Respuesta

9

trabajé a cabo la adaptación del valor 'patrón' en la anotación @Field no tiene que coincidir con lo que está en su schema.xml. Por lo tanto, he definido un mapa de mi clase doc:

@Field("*DF") 
private Map<String, Object> dynamicFields; 

y luego en el schema.xml los dynamicFields tienen patrones fijaron posteriormente por 'DF':

<dynamicField name="*_sDF" type="string" indexed="true" stored="true"/> 
<dynamicField name="*_siDF" type="sint" indexed="true" stored="true"/> 
<dynamicField name="*_tDF" type="date" indexed="true" stored="true"/> 

Ahora todo el dynamicField con diferentes tipos de valor obtener almacenados y recuperados utilizando solrServer.addBean (doc) y solrResponse.getBeans (Doc.class). Esto es con Solr 3.2.0 No funcionaba con 1.4 ..

+1

Gracias Tim, esto me ayudó. También encontré que para los campos dinámicos, se debe proporcionar un patrón para la anotación de campo, incluso si solo es "*". El atributo 'almacenado' también puede ser falso. –