我有一个类型化的类,它包含一个表示多边形的GeoJson字符串变量。 如何使用NEST在弹性搜索中对其进行索引? 用以下标记字段:
[ElasticProperty(Type = FieldType.GeoShape)]
public string Polygon { get; set; }
并将其作为<{1}}中的
CreateIndex
给出了这个错误:
无法解析[polygon]];嵌套:ElasticsearchParseException [Shape必须是由类型和坐标组成的对象“
由于我将GeJSon作为输入并且GeoShape的坐标为Geo JSON,我该如何映射这些数据?我可以反序列化输入并填充ES结构,但它似乎是一个太复杂,容易出错的方法。
谢谢,
莫妮卡
答案 0 :(得分:1)
我写了a blog post about working with Geospatial queries with Elasticsearch and NEST。
处理要保留为geo_shape
类型的字段并在应用程序中轻松使用它们的一种好方法是使用NetTopologySuite,其中包含许多其他有用的东西,用于转换序列化程序代码中的IGeometry
类型(例如Polygon,LineString,MultiPolygon)为GeoJSON,geo_shape
类型支持的格式。然后可以在NEST客户端注册序列化程序,以便正确处理类型IGeometry
的模型属性。
答案 1 :(得分:0)
Russ Cam的解决方案看起来不错。但是,如果你需要从文件中获取形状并将其导入ElasticSearch,那就太过分了。为了使它工作,你只需要将你的json反序列化为一个对象。
setFolderPath(null)
因此,如果模型的多边形为JsonConvert.DeserializeObject<object>(json);
而不是object
,则可以使用。
string