2012-06-22 15 views
7

'daki bir alana nasıl kopyalayabilirim Lat ve Lng alanlarıyla solr adlı bir belgem var. Lat ve Lng'dan alınan verileri içeren store adlı yeni bir alan eklemem gerekiyor. Ben copyField alanını kullanmaya çalıştı ama hata var:2 alan verisini Solr

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

aynı hedef alanı içinde iki alanın içeriğini kopyalamak mümkün mü: Burada

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

benim yapılandırma?

+0

kullanabilirsiniz. – Mirodil

cevap

2

Sen bağlam olmadan sorunuzu alarak store

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

"mağaza" alanını çok değiştirirseniz. indeksleme konusunda hatam var. – Mirodil

+1

Gördüğünüz gibi, aslında ihtiyacınız olan diğer iki alanın birleştirilmesiyle dolu tek değerli bir alan. Bu doğru mu? –

+0

evet, doğru. – Mirodil

6

multivalued olarak ayarlamak deneyebilirsiniz:

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

cevabı elbette, evet. Örnek şema bunu, bir alanı daha basit bir şekilde arama yapmak için birden çok alanı ortak bir "metin" alanına (çoklu Değer) kopyalamak için yapar.

Ancak daha fazla bağlamda, aslında yapmaya çalıştığınız, Solr'ın copyField ile schema.xml'in bir giriş çiftini (sizin durumunuzda lat ve lon) alıp alamayacağını ve bunları bir ara virgülle birleştirip birleştirmeyeceğini belirlemektir. belirli alan. Cevap hayır. Verileri Solr'a verirken bu şekilde hazırlamanız veya DIH (DataImportHandler) kullanıyorsanız DIH trafosu kullanmanız gerekecektir. Bir alternatif önermek için tereddüt ediyorum, ama bir hack olarak, latin ve lon'unu store_0_coordinate ve store_1_coordinate (belki de başka bir şekilde) haline getirmeyi deneyebilirsiniz. Ama gerçekten işe yarayabilir olsa bile, bu önerilen bir yaklaşım değildir.

+0

Bunu "UpdateRequestProcessor" ile yapabilir miyim? – Mirodil

+0

Bunu yapmak için kesinlikle bir URP yazabilirsiniz. Bu bir URP'nin iyi bir kullanımı. –

+0

Teşekkürler. * .csv dosyasından veri yüklüyorum ve * .csv dosyasında 3 sütun posta kodu, lat, lng var. Konfigürasyon URP ile bana yardımcı olabilir misiniz? – Mirodil

4

Belki modası geçmiş olduğunu ancak ben bu sorunu çözmedi görürseniz "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>