【问题标题】:How to AutoMap Elasticsearch properties using NEST object initializer syntax如何使用 NEST 对象初始化器语法自动映射 Elasticsearch 属性
【发布时间】:2019-08-19 20:21:25
【问题描述】:

有没有办法将 NEST 的 AutoMap 功能与 Object Initializer Syntax 一起使用?

根据教程here,对象初始化器语法“在整个客户端中得到完全支持”。那么,使用本教程中的示例,我将如何使用 Object Initializer Syntax 执行此映射?

.Nested<PackageDependency>(nn => nn
    .Name(pv => pv.Dependencies.First())
    .AutoMap()
)

我试过这样:

new NestedProperty
{
    Name = new PropertyName(nameof(PackageVersion.Dependencies))
}

但我在NestedProperty 对象上找不到与AutoMap 对应的属性。 TextProperty 等也是如此。

如果不可能,我将只使用 Fluent API 语法 - 没问题。但我想确保我没有遗漏一些明显的东西。

【问题讨论】:

    标签: elasticsearch .net-core nest


    【解决方案1】:

    您已经设法找到了一个方法,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&lt;PackageVersion&gt;(pv =&gt; 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
            }
          }
        }
      }
    }
    

    如果您需要覆盖任何将以这种方式自动映射的属性,您可以在从.GetProperties() 方法调用返回的IProperties 上执行此操作,或者使用Properties&lt;T&gt; 上的索引器,即Properties&lt;PackageDependency&gt;例子。

    【讨论】:

    • 啊……完美。非常感谢 - 这正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多