是否可以通过对象初始化语法使用NEST的AutoMap
功能?
根据教程here,对象初始化程序语法“在整个客户端中完全受支持”。因此,以教程中的示例为例,如何使用对象初始化器语法执行此映射?
.Nested<PackageDependency>(nn => nn
.Name(pv => pv.Dependencies.First())
.AutoMap()
)
我已经这样尝试过了:
new NestedProperty
{
Name = new PropertyName(nameof(PackageVersion.Dependencies))
}
但是我在NestedProperty
对象上找不到可以与AutoMap
对应的属性。 TextProperty
等也是如此
如果不可能,我将仅使用Fluent API语法-没问题。但我想确保我没有遗漏明显的东西。
答案 0 :(得分:1)
您已经设法找到一种方法display
,该方法在Object Initializer语法中没有直接对应的方法:)因为没有可用的通用类型参数来表示CLR类型,所以不能以相同的方式建模。
但是,使用AutoMap()
使用的组件可以达到相同的效果
AutoMap
这将产生分配给从var nestedProperty = new NestedProperty
{
Name = Nest.Infer.Property<PackageVersion>(pv => pv.Dependencies.First()),
Properties = new Properties<PackageDependency>(
new PropertyWalker(typeof(PackageDependency), null).GetProperties())
};
解析的字段名称的以下JSON(默认为Nest.Infer.Property<PackageVersion>(pv => pv.Dependencies.First())
)
dependencies
如果您需要覆盖将通过这种方式自动映射的任何属性,则可以在{
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"framework": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
方法调用返回的IProperties
上进行操作,也可以使用.GetProperties()
上的索引器进行操作在此示例中为Properties<T>
。