如何在弹性搜索中索引带有GeoShape字符串GeoJson多边形的类型化对象?

时间:2015-09-28 20:17:15

标签: c# json elasticsearch geojson nest

我有一个类型化的类,它包含一个表示多边形的GeoJson字符串变量。 如何使用NEST在弹性搜索中对其进行索引? 用以下标记字段:

[ElasticProperty(Type = FieldType.GeoShape)]
public string Polygon { get; set; }

并将其作为<{1}}中的

CreateIndex

给出了这个错误:

  

无法解析[polygon]];嵌套:ElasticsearchParseException [Shape必须是由类型和坐标组成的对象“

由于我将GeJSon作为输入并且GeoShape的坐标为Geo JSON,我该如何映射这些数据?我可以反序列化输入并填充ES结构,但它似乎是一个太复杂,容易出错的方法。

谢谢,

莫妮卡

2 个答案:

答案 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的模型属性。

I have an example of doing this up on BitBucket.

答案 1 :(得分:0)

Russ Cam的解决方案看起来不错。但是,如果你需要从文件中获取形状并将其导入ElasticSearch,那就太过分了。为了使它工作,你只需要将你的json反序列化为一个对象。

setFolderPath(null)

因此,如果模型的多边形为JsonConvert.DeserializeObject<object>(json); 而不是object,则可以使用。

string