簡體   English   中英

我如何注冊一個自定義轉換器,以便@GeoShapeField 可以使用它?

[英]How do I register a custom converter so that @GeoShapeField picks it up?

我正在使用 spring-data-elasticsearch (5) 自動將第三方數據寫入 ES (8) 索引。 數據包含 GML 格式的地理數據,它被解析為嵌套的Map<String, Object>

在我的 POJO 中,我有一個字段

@GeoShapeField
private Map<String, Object> geometry;

在許多情況下,這寫得非常好; 然而,我得到的數據也可以包含例如Envelope ,它不受 GeoJson 支持,但可以毫無問題地導入到 ES 中。

我可以編寫簡單的自定義ReadingConverter / WritingConverter s - 但是如何以@GeoShapeField在適當時自動選擇它們的方式注冊它們?

我看到org.springframework.data.elasticsearch.core.convert.GeoConverters負責選擇正確的轉換器,尤其是。 .GeoJsonToMapConverter.MapToGeoJsonConverter 我將如何正確地擴展類/替換它,以便 @GeoShapeField 查找其他(或更多)類型?

正如 PJMeisch 在評論中指出的那樣,我有幾個理解問題,導致問題的制定。

我的實際問題的答案很簡單:對於 Envelope,Elasticsearch 期望

"myField": {
    "type" : "envelope",
    "coordinates" : [ [100.0, 1.0], [101.0, 0.0] ]
}

要使用 spring-data-elasticsearch 實現這一點,提供一個簡單的轉換為Map<String, Object>就足夠了:

Map<String, Object> myField = new HashMap<>();
myField.put("type", "envelope");
myField.put("coordinates", Arrays.asList(Arrays.asList(100.0, 1.0), Arrays.asList(101.0, 0.0)));

我絆倒的點是數據 我收到指定左下角和右上角的邊界框。 但是,ES 需要邊界框的左上角和右下角。 交換各自的位置后,現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM