2012-06-22 6 views
7

Tengo un documento en sol con los campos Lat y Lng. Necesito agregar un nuevo campo llamado store que contenga datos tomados tanto del Lat como del Lng. He intentado utilizar copyField campo pero me dio el error:Cómo puedo copiar 2 campos de datos a un campo en Solr

Field store is not multivalued and destination for multiple copyFields (2)

Aquí está mi configuración:

<fields> 
    <field name="lat" type="sdouble" indexed="true" stored="true" required="true" multiValued="false" /> 
    <field name="lng" type="sdouble" indexed="true" stored="true" required="true" multiValued="false" /> 
    <field name="store" type="text" indexed="true" stored="true"/> 
</fields> 

<copyField source="lat" dest="store"/> 
<copyField source="lng" dest="store"/> 

¿Es posible copiar el contenido de dos campos dentro del mismo campo de destino?

+0

si ves que no solucionó este problema. – Mirodil

Respuesta

2

Se podría intentar establecer store como multivalued

<field name="store" type="location" indexed="true" stored="true" multiValued="true" /> 
+0

si hago 'store' field multiValued. recibí un error al indexar. – Mirodil

+1

Veo, por lo que realmente necesita es un solo campo valuado poblado con la concatenación de los otros dos campos. ¿Es eso correcto? –

+0

sí, eso es correcto. – Mirodil

6

Llevar a su pregunta sin contexto:

Is it possible to copy the content of two fields within the same destination field?"

La respuesta es sí, sin duda. El esquema de ejemplo hace esto con para copiar múltiples campos a un campo común de "texto" (multiValued) para facilitar la búsqueda por un campo.

Pero al ver más contexto, lo que realmente intenta hacer es determinar si el esquema schema.xml de Solr con copyField puede tomar un par de campos de entrada (lat y lon en su caso) y concatenarlos con una coma intermedia a un campo particular. La respuesta es no. Tendrá que preparar los datos de esta forma cuando los administre a Solr, o use un transformador DIH si está utilizando el DIH (el DataImportHandler). Dudo en sugerir una alternativa, pero como un truco, puede intentar poner lat y lon en store_0_coordinate y store_1_coordinate (o tal vez sea al revés). Pero realmente, este no es un enfoque recomendado, incluso si podría funcionar.

+0

¿Puedo hacer esto con "UpdateRequestProcessor"? – Mirodil

+0

Definitivamente podría escribir un URP para hacerlo. Ese es un buen uso de un URP. –

+0

Gracias. Estoy cargando datos del archivo * .csv y hay 3 columnas de código postal, lat, lng en el archivo * .csv. ¿Podría ayudarme con la configuración de URP? – Mirodil

4

Tal vez es que anticuado, pero se puede utilizar "updateRequestProcessorChain"

<updateRequestProcessorChain name="composite-position"> 
    <processor class="solr.CloneFieldUpdateProcessorFactory"> 
    <str name="source">lat</str> 
    <str name="source">lng</str> 
    <str name="dest">store</str> 
    </processor> 
    <processor class="solr.ConcatFieldUpdateProcessorFactory"> 
    <str name="fieldName">store</str> 
    <str name="delimiter">;</str> 
    </processor> 
    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 
Cuestiones relacionadas