我的索引包含一个 Nest.GeoShape 类型的字段。
----------
问题 #1 —— Kibana 将该字段显示为“indexed = false”,即使它是这样定义的(在创建索引期间使用 .MapFromAttributes())...
[ElasticProperty(Index = FieldIndexOption.NotAnalyzed, Store = true, IncludeInAll = false)]
public Nest.GeoShape ElasticShape { get; set; }
这是索引创建,以防出现问题...
client.CreateIndex(c => c
.Index(indexName)
.InitializeUsing(set)
.AddMapping<ItemSearchable>(m => m
.MapFromAttributes()
.Properties(props => props
.GeoShape(x => x
.Name(n => n.ElasticShape)
.Tree(GeoTree.Geohash)
.TreeLevels(9)
.DistanceErrorPercentage(0.025))))
----------
问题 #2——当我进行查询时,返回的结果无法反序列化。
{“无法创建 Nest.GeoShape 类型的实例。类型是接口或抽象类,无法实例化。路径 'hits.hits[0]._source.elasticShape.coordinates',第 10 行,位置 19。”}
我希望这是因为我使用的是 Nest.GeoShape 而不是显式 GeoShape 类型(如 EnvelopeGeoShape),但在我的情况下,每个文档都有不同的形状(5 个可能是圆形、3 个矩形、2 个多边形和 74 个点) .
那么有没有办法可以进一步控制 Json 反序列化来检查类型并显式映射它以生成特定类型?或者(理想情况下)有没有办法让反序列化自动从类型字段中“弄清楚”?