问题描述
我正在尝试使用nesT在ElasticSearch中创建一个新索引,该新索引具有别名,因此我需要一个IndexName实例才能实现此目的。这是我要实现的请求:
PUT activeIndexName
{
"aliases": {
"indexName": {}
}
}
public bool CreateIndex(string indexName)
{
string date = DateTime.Now.Date.ToString("yyyy.MM.dd",CultureInfo.InvariantCulture);
string activeIndexName = string.Format("{0}-{1}-000001",indexName,date);
IDictionary<IndexName,IAlias> aliasDict = new Dictionary<IndexName,IAlias>();
IndexName indexNameDict = IndexName.From<IndexName>(indexName);//PROBLEM HERE
aliasDict.Add(indexNameDict,new Alias());
CreateIndexRequest createIndexRequest = new CreateIndexRequest(activeIndexName)
{
Aliases = new Aliases(aliasDict)
};
CreateIndexResponse response = _client.Indices.Create(createIndexRequest);
return response.IsValid;
}
Index name is null for the given type and no default index is set. Map an index name using ConnectionSettings.DefaultMappingFor<TDocument>() or set a default index using ConnectionSettings.DefaultIndex().
在我看来,索引需要先存在才能创建索引?但是,需要使用别名创建它。 nest.IndexName没有构造函数,所以我不确定如何拥有它的实例,以便可以创建Dictionary
解决方法
IndexName
implements an implicit conversion from string
,因此您可以通过替换来简化和修复代码
IndexName indexNameDict = IndexName.From<IndexName>(indexName);//PROBLEM HERE
aliasDict.Add(indexNameDict,new Alias());
使用
aliasDict.Add(indexName,new Alias());
,
Aliases
实现了IEnumerable<IndexName,IAlias>
和Add(IndexName,IAlias)
方法,因此可以使用集合初始化程序将代码缩短为
public bool CreateIndex(string indexName)
{
string date = DateTime.Now.Date.ToString("yyyy.MM.dd",CultureInfo.InvariantCulture);
string activeIndexName = string.Format("{0}-{1}-000001",indexName,date);
CreateIndexRequest createIndexRequest = new CreateIndexRequest(activeIndexName)
{
Aliases = new Aliases
{
{ indexName,new Alias() }
}
};
CreateIndexResponse response = _client.Indices.Create(createIndexRequest);
return response.IsValid;
}