如何使用NEST对象初始化器语法自动映射Elasticsearch属性

时间:2019-03-28 23:06:19

标签: elasticsearch .net-core nest

是否可以通过对象初始化语法使用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语法-没问题。但我想确保我没有遗漏明显的东西。

1 个答案:

答案 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>