gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:31:49 25 4
gpt4 key购买 nike

有没有一种方法可以将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语法-没问题。但是我想确保我不会错过任何明显的东西。

最佳答案

您已经设法找到一种方法AutoMap(),该方法在Object Initializer语法中没有直接对应的方法:)因为没有可用的通用类型参数来表示CLR类型,所以无法以相同的方式对其进行建模。

但是,您可以通过使用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>上的索引器,在本示例中为 Properties<PackageDependency>

关于elasticsearch - 如何使用NEST对象初始化器语法自动映射Elasticsearch属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com