c# nest elastic generic index 创建
c# nest elastic generic index create
我有一个通用的“创建”方法。此方法将按通用类型创建索引。
public void Create<T>(T node)
{
if (!_elasticClient.IndexExists(_indexName).Exists)
{
var indexSettings = new IndexSettings();
indexSettings.NumberOfReplicas = 1;
indexSettings.NumberOfShards = 3;
var createIndexDescriptor = new CreateIndexDescriptor(_indexName)
.Mappings(ms => ms.Map<T>(m => m.AutoMap()))
.InitializeUsing(new IndexState() { Settings = indexSettings })
.Aliases(a => a.Alias(aliasName));
var response = _elasticClient.CreateIndex(createIndexDescriptor);
}
_elasticClient.Index<T>(node, idx => idx.Index(_indexName));
}
但我收到错误:
类型'T'必须是引用类型才能在泛型类型或方法中用作参数'T'
'MappingsDescriptor.Map(Func)'
类型'T'必须是引用类型才能在泛型类型或方法中用作参数'T'
'ElasticClient.Index(T, Func)'
尝试添加where T : class
:
public void Create<T>(T node) where T : class
{
if (!_elasticClient.IndexExists(_indexName).Exists)
{
var indexSettings = new IndexSettings();
indexSettings.NumberOfReplicas = 1;
indexSettings.NumberOfShards = 3;
var createIndexDescriptor = new CreateIndexDescriptor(_indexName)
.Mappings(ms => ms
.Map<T>(m => m.AutoMap())
)
.InitializeUsing(new IndexState() { Settings = indexSettings })
.Aliases(a => a.Alias(aliasName));
var response = _elasticClient.CreateIndex(createIndexDescriptor);
}
_elasticClient.Index<T>(node, idx => idx.Index(_indexName));
}
}
我解决了我遇到的问题,请参阅下文。
nest 中的 .Map<T>()
方法对 T
使用 class 约束。您需要向通用 T
.
添加相同的 class 约束
public void Create<T>(T node)
where T: class
{
// your code here
}
我有一个通用的“创建”方法。此方法将按通用类型创建索引。
public void Create<T>(T node)
{
if (!_elasticClient.IndexExists(_indexName).Exists)
{
var indexSettings = new IndexSettings();
indexSettings.NumberOfReplicas = 1;
indexSettings.NumberOfShards = 3;
var createIndexDescriptor = new CreateIndexDescriptor(_indexName)
.Mappings(ms => ms.Map<T>(m => m.AutoMap()))
.InitializeUsing(new IndexState() { Settings = indexSettings })
.Aliases(a => a.Alias(aliasName));
var response = _elasticClient.CreateIndex(createIndexDescriptor);
}
_elasticClient.Index<T>(node, idx => idx.Index(_indexName));
}
但我收到错误:
类型'T'必须是引用类型才能在泛型类型或方法中用作参数'T' 'MappingsDescriptor.Map(Func
)' 类型'T'必须是引用类型才能在泛型类型或方法中用作参数'T' 'ElasticClient.Index(T, Func
)'
尝试添加where T : class
:
public void Create<T>(T node) where T : class
{
if (!_elasticClient.IndexExists(_indexName).Exists)
{
var indexSettings = new IndexSettings();
indexSettings.NumberOfReplicas = 1;
indexSettings.NumberOfShards = 3;
var createIndexDescriptor = new CreateIndexDescriptor(_indexName)
.Mappings(ms => ms
.Map<T>(m => m.AutoMap())
)
.InitializeUsing(new IndexState() { Settings = indexSettings })
.Aliases(a => a.Alias(aliasName));
var response = _elasticClient.CreateIndex(createIndexDescriptor);
}
_elasticClient.Index<T>(node, idx => idx.Index(_indexName));
}
}
我解决了我遇到的问题,请参阅下文。
nest 中的 .Map<T>()
方法对 T
使用 class 约束。您需要向通用 T
.
public void Create<T>(T node)
where T: class
{
// your code here
}