C#でNESTクライアントを使用し、Elasticsearch v5.xを使用して汎用データローダーを作成しようとしています。私は自分のESインデックス上の型にカスタムクラスマッピングを定義することができ、idとして扱われるべきプロパティを特に記述することもできます。これは正常に動作し、データをロードするためにバルクAPIを使用することができます。NESTのElasticsearchタイプにIdPropertyを動的に割り当てます。
[ElasticsearchType(IdProperty = "col1")]
public class Table1
{
public int col1 { get; set; }
public string col2 { get; set; }
public string col3 { get; set; }
}
ただし、インデックスに新しいタイプをロードする必要があるたびに、クラスを定義する必要があります。だから私は、XML入力を提供し、クラスオブジェクトを動的に生成し、そのクラスオブジェクトに対して、IdPropertyを設定する必要がある汎用ロードユーティリティを構築したいと考えています。私はまだ飛行中に動的なオブジェクトを構築する方法を理解しようとしており、今週試してみるべきいくつかのサンプルを見つけました。
私はその障害を乗り越えることができると言いましょう。私の次の質問は、実行時にIdPropertyを動的に設定する方法です。他の提案も歓迎されます。
おかげ
ご回答ありがとうございます。私は、主な問題に対処するために少し別のルートをとった。私は今私のXMLをJsonに変換しています。私は文書を索引付けするために使用している生のJsonを生成しています。その間に、私はJsonのどのプロパティがIdとして扱われるべきかを識別するための設定を持っており、idを動的に正しく追加しています。 jsonがビルドされたら、低レベルのクライアントの一括メソッドを使用しています。 – askids
また、私は同様の結果、つまりid属性を動的に追加するためにexpandoObjectでdynamicを使ってみました。より小さなデータセットに対しても機能します。しかし、より大きなセットのために、私はStackoverflow例外を取得し始めました(恐らく両方が悪いコーディングと動的オブジェクトの制限のためです)。だから私はそのアプローチを追求しませんでした。 – askids