我正在尝试使用C#中的NEST客户端和使用Elasticsearch v5.x构建通用数据加载器。我可以定义自定义类映射到我的ES索引上的类型,还特别提到应该将哪个属性视为id。这很好用,我可以使用批量API加载数据。
[ElasticsearchType(IdProperty = "col1")]
public class Table1
{
public int col1 { get; set; }
public string col2 { get; set; }
public string col3 { get; set; }
}
但是,每次我必须将新类型加载到索引时,这将需要我定义类。所以我想构建一个通用的加载实用程序,我可以提供XML输入,动态生成一个类对象,对于该类对象,我需要设置IdProperty。我仍在试图弄清楚如何动态构建一个动态对象并且遇到了一些我将在本周试用的样本。
让我们说我能够克服这个障碍,我的下一个问题是如何在运行时动态设置IdProperty?我们也欢迎任何其他建议。
由于
答案 0 :(得分:0)
使用System.ComponentModel.TypeDescriptor
,可以在运行时向类型添加属性 ,只要TypeDescriptor
用于检索这些属性 即可。然而,NEST不使用TypeDescriptor
,因此无法采用此路线。
默认情况下,NEST will look for a property with the case-insensitive name "Id"
to use as the id for a document,如果不存在ElasticsearchTypeAttribute
IdProperty
并且ConnectionSettings
未设置推断映射。因此,您始终可以确保您的类型具有Id
属性。