2012-06-22 13 views
7

Mam dokument w solr z polami Lat i Lng. Muszę dodać nowe pole o nazwie store zawierające dane pobrane zarówno z Lat i Lng. Próbowałem użyć copyField boiska, ale mam błąd:Jak skopiować 2 pola danych do jednego pola w Solr

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

Oto moja konfiguracja:

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

Czy to możliwe, aby skopiować zawartość dwóch pól w tym samym polu odbiorcy?

+0

jeśli widzisz, że nie rozwiąże tego problemu. – Mirodil

Odpowiedz

2

można spróbować ustawić store jak multivalued

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

jeśli zrobię pole 'store' multiValued. Mam błąd w indeksowaniu. – Mirodil

+1

Rozumiem, więc rzeczywiście potrzebne jest jednoznaczne pole wypełnione połączeniem dwóch pozostałych pól. Czy to jest poprawne? –

+0

tak, to się zgadza. – Mirodil

6

Biorąc pytanie bez kontekstu:

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

Odpowiedź brzmi: tak, na pewno. Przykładowy schemat umożliwia kopiowanie wielu pól do wspólnego pola "tekstowego" (multiValued), aby wyszukiwanie w jednym polu było prostsze.

Ale patrząc na większy kontekst, to, co faktycznie próbujesz zrobić, to określić, czy schemat Scrma.xml firmy Solr z copyField może wziąć parę pól wejściowych (lat i lon w twoim przypadku) i połączyć je przecinkiem pośrednim z szczególne pole. Odpowiedź brzmi nie. Będziesz musiał przygotować dane w ten sposób, przekazując je do Solr, lub użyć transformatora DIH, jeśli używasz DIH (DataImportHandler). Waham się zasugerować alternatywę, ale jako hack, możesz spróbować umieścić lon i lon w storeselfcoordinate i store_1_coordinate (a może na odwrót). Ale tak naprawdę to nie jest zalecane podejście, nawet jeśli może działać.

+0

Czy mogę to zrobić z "UpdateRequestProcessor"? – Mirodil

+0

Można na pewno napisać URP, aby to zrobić. To dobry użytek z URP. –

+0

Dziękuję. Ładuję dane z pliku * .csv, a w pliku * .csv znajdują się 3 kolumny kodu pocztowego, lat, lng. Czy możesz mi pomóc w konfiguracji URP? – Mirodil

4

Może to jest przestarzały, ale można użyć „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> 
Powiązane problemy