在嵌套中创建indexname的示例

lc8prwob  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(2)|浏览(278)

我正在尝试使用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没有构造函数,因此我不确定如何拥有它的示例,以便可以创建字典<indexname,ialias>。

czq61nw1

czq61nw11#

IndexName 实现从 string 因此,您可以通过替换

IndexName indexNameDict = IndexName.From<IndexName>(indexName);//PROBLEM HERE
aliasDict.Add(indexNameDict, new Alias());

具有

aliasDict.Add(indexName, new Alias());
ghhaqwfi

ghhaqwfi2#

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

相关问题