私のインデックスには、Nest.GeoShape タイプのフィールドが含まれています。
----------
問題 #1 -- このように定義されていても (インデックス作成時に .MapFromAttributes() を使用して)、Kibana はそのフィールドを「indexed = false」と表示します...
[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."}
明示的な GeoShape タイプ (EnvelopeGeoShape など) ではなく、Nest.GeoShape を使用しているためだと思いますが、私の場合、各ドキュメントは異なる形状になります (5 つは円、3 つの長方形、2 つのポリゴン、および 74 ポイント)。 .
Json Deserialization をさらに制御して型をチェックし、明示的にマップして特定の型を生成する方法はありますか? または(理想的には)型フィールドから自動的に逆シリアル化に「それを理解させる」方法はありますか?