elasticsearch 如何注册自定义转换器以便@GeoShapeField拾取它?

wfauudbj  于 2023-01-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(224)

我正在使用spring-data-elasticsearch(5)自动将第三方数据写入ES(8)索引,这些数据包含GML格式的地理数据,这些数据被解析为嵌套的Map<String, Object>
我的POJO中有一个字段

@GeoShapeField
private Map<String, Object> geometry;

在许多情况下,这一点写得非常好;然而,我得到的数据也可以包含Envelope,GeoJson不支持该数据,但可以将其导入ES而不会出现问题。
我可以编写简单的自定义ReadingConverter/WritingConverter-但是如何注册它们,以便@GeoShapeField在适当的时候自动选择它们?
我看到org.springframework.data.elasticsearch.core.convert.GeoConverters负责选择正确的转换器,特别是.GeoJsonToMapConverter.MapToGeoJsonConverter。我如何正确地扩展/替换类,以便@GeoShapeField查找额外(或更多)类型?

am46iovg

am46iovg1#

P. J. Meisch在评论中指出,我有几个理解问题,导致了这个问题的提出。
我真正的问题的答案很简单:对于信封,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期望边界框为左上角和右下角。在切换各自的位置后,现在一切正常。

相关问题