2012-06-22 30 views
7

Tôi có tài liệu bằng solr với các trường LatLng. Tôi cần phải thêm một trường mới có tên là store chứa dữ liệu được lấy từ cả hai LatLng. Tôi cố gắng để sử dụng copyField lĩnh vực nhưng tôi đã nhận lỗi:Làm thế nào có thể sao chép dữ liệu trường 2 vào một trường trên Solr

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

Dưới đây là cấu hình của tôi:

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

Có thể sao chép nội dung của hai lĩnh vực trong lĩnh vực địa điểm giống nhau không?

+0

nếu bạn nhìn thấy tôi đã không giải quyết vấn đề này. – Mirodil

Trả lời

2

Bạn có thể cố gắng thiết lập store như multivalued

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

nếu tôi tạo trường 'store' multiValued. tôi gặp lỗi khi lập chỉ mục. – Mirodil

+1

Tôi thấy, vì vậy bạn thực sự cần là một trường có giá trị duy nhất được kết hợp với hai trường khác. Đúng không? –

+0

vâng, điều đó đúng. – Mirodil

6

Lấy câu hỏi của bạn mà không cần bối cảnh:

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

Câu trả lời là có, chắc chắn. Lược đồ ví dụ thực hiện điều này với việc sao chép nhiều trường vào một trường "văn bản" chung (đa giá trị) để làm cho việc tìm kiếm theo một trường đơn giản hơn. Tuy nhiên, nhìn vào bối cảnh nhiều hơn, những gì bạn đang thực sự cố gắng làm là xác định xem schema.xml của Solr có copyField có thể lấy một cặp đầu vào của trường (lat và lon trong trường hợp của bạn) và nối chúng với một dấu phẩy trung gian đến một trường cụ thể. Câu trả lời là không. Bạn sẽ phải chuẩn bị dữ liệu theo cách này khi đưa nó cho Solr, hoặc sử dụng một biến DIH nếu bạn đang sử dụng DIH (DataImportHandler). Tôi ngần ngại đề nghị một sự thay thế, nhưng là một hack, bạn có thể thử đặt lat và lon vào store_0_coordinate và store_1_coordinate (hoặc có thể đó là cách khác). Nhưng thực sự, đây không phải là một cách tiếp cận được khuyến khích ngay cả khi nó có thể hoạt động.

+0

Tôi có thể làm điều này với "UpdateRequestProcessor" không? – Mirodil

+0

Bạn chắc chắn có thể viết một URP để làm điều đó. Đó là cách sử dụng tốt của URP. –

+0

Cảm ơn bạn. Tôi đang tải dữ liệu từ tệp * .csv và có 3 cột mã bưu điện, lat, lng trong tệp * .csv. Bạn có thể vui lòng giúp tôi với cấu hình URP? – Mirodil

0

Bạn có thể thử một cái gì đó như thế:

Two double in one location

nếu bạn có thể sử dụng DIH (Dữ liệu nhập khẩu Handler). Hy vọng thet sẽ giúp!

4

Có lẽ là nó lỗi thời nhưng bạn có thể sử dụng "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> 
Các vấn đề liên quan