将类型名称传递给 ElasticClient 对象 Nest

pass type name to ElasticClient object Nest

我正在使用自定义映射创建索引我的问题是 ElasticClient 的索引、createindex 等对应于索引的方法仅获取索引名称作为输入参数并从 class 作为通用参数传递给它们的方法有没有办法将类型名称传递给 ElasticClient 方法,例如 CreateIndex 方法并强制它接受它而不是使用 class 名称 ???

这是我的部分代码

  var qq = Elasticclient.CreateIndex("testindex", a => a.Mappings(f => f.Map<BankPaymentLogModel>(
                          b => b.Properties(c => c.String(d => d.Name(e => e.testProperty))

                       ))));

任何帮助将不胜感激

您有几个选项可以指定不同的类型名称,NEST 将从 POCO 名称推断出该名称

1.Use Map<T>(TypeName type, Func<TypeMappingDescriptor<T>, ITypeMapping>>) 重载

var createIndexResponse = client.CreateIndex("testindex", a => a
    .Mappings(f => f
        .Map<BankPaymentLogModel>("my-type", b => b
            .Properties(c => c
                .String(d => d
                    .Name(e => e.testProperty)
                )
            )
        )
    )
);

但是,使用此方法意味着您需要为每个使用 BankPaymentLogModel POCO 的请求调用 .Type("my-type"),以便在请求中发送相同的类型名称。所以,以下选项可能更好

2.Use ElasticsearchTypeAttribute on BankPaymentLogModel type 指定类型名称

[ElasticsearchType(Name = "my-type")]
public class BankPaymentLogModel
{
    public string testProperty { get; set; }
}

var createIndexResponse = client.CreateIndex("testindex", a => a
    .Mappings(f => f
        .Map<BankPaymentLogModel>(b => b
            .Properties(c => c
                .String(d => d
                    .Name(e => e.testProperty)
                )
            )
        )
    )
);

3.Or 如果您不喜欢属性,可以在 ConnectionSettings 上为 BankPaymentLogModel

配置默认类型名称
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var connectionSettings = new ConnectionSettings(pool)
    .InferMappingFor<BankPaymentLogModel>(m => m
        .TypeName("my-type")
    );

var client = new ElasticClient(connectionSettings);

var createIndexResponse = client.CreateIndex("testindex", a => a
    .Mappings(f => f
        .Map<BankPaymentLogModel>(b => b
            .Properties(c => c
                .String(d => d
                    .Name(e => e.testProperty)
                )
            )
        )
    )
);

以上所有 3 个选项都会产生以下请求 json

PUT http://localhost:9200/testindex
{
  "mappings": {
    "my-type": {
      "properties": {
        "testProperty": {
          "type": "string"
        }
      }
    }
  }
}