2012-06-22 12 views
7

Ho un documento in solr con campi Lat e Lng. Devo aggiungere un nuovo campo chiamato store contenente i dati presi da entrambi gli Lat e Lng. Ho provato ad usare copyField campo, ma ho ottenuto l'errore:Come copiare i dati di 2 campi in un campo su Solr

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

Ecco la mia configurazione:

<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"/> 

E 'possibile copiare il contenuto di due campi all'interno dello stesso campo di destinazione?

+0

se si vede che non ha risolto questo problema. – Mirodil

risposta

2

Si potrebbe provare a impostare store come multivalued

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

se faccio il campo 'store' multiValued. ho un errore nell'indicizzazione – Mirodil

+1

Vedo, quindi è effettivamente necessario un campo a valore singolo popolato con la concatenazione degli altri due campi. È corretto? –

+0

sì, è corretto. – Mirodil

6

Prendendo la tua domanda senza contesto:

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

La risposta è sì, sicuramente. Lo schema di esempio esegue questa operazione per copiare più campi in un campo "testo" comune (valore multiplo) per semplificare la ricerca per un campo.

Ma guardando più contesto, quello che stai effettivamente cercando di fare è determinare se lo schema.xml di Solr con copyField può prendere una coppia di campi di input (lat e lon nel tuo caso) e concatenarli con una virgola intermedia ad un campo particolare. La risposta è no. Dovrai preparare i dati in questo modo quando lo dai a Solr, o usare un trasformatore DIH se stai usando il DIH (il DataImportHandler). Esito a suggerire un'alternativa, ma come trucco potresti provare a inserire lat e lon in store_0_coordinate e store_1_coordinate (o forse è il contrario). Ma in realtà, questo non è un approccio raccomandato, anche se potrebbe funzionare.

+0

Posso farlo con "UpdateRequestProcessor"? – Mirodil

+0

Si potrebbe sicuramente scrivere un URP per farlo. È un buon uso di un URP. –

+0

Grazie. Sto caricando i dati dal file * .csv e ci sono 3 colonne codice postale, lat, lng nel file * .csv. Potresti aiutarmi con la configurazione URP? – Mirodil

0

si può provare qualcosa di simile:

Two double in one location

se è possibile utilizzare DIH (dati Importatore Handler). Spero che ti aiuterà!

4

Forse è vero vecchio, ma è possibile utilizzare "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> 
Problemi correlati