将类型名称传递给 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"
}
}
}
}
}
我正在使用自定义映射创建索引我的问题是 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"
}
}
}
}
}