在 NEST 中创建 IndexName 的实例

Create instance of IndexName in NEST

我正在尝试使用 NEST 在 ElasticSearch 中创建一个新索引,这个新索引有别名,所以我需要一个 IndexName 实例来实现这一点。这是我要实现的请求:

PUT activeIndexName
{
    "aliases": {
        "indexName": {}
    }
}

我在 NEST 中的代码:

    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;
}