elasticsearch 如何在C#中使用Nest获取所有索引并过滤索引

fnatzsnv  于 2023-05-28  发布在  ElasticSearch
关注(0)|答案(5)|浏览(227)

我需要列出Elasticsearch中的所有索引和类型。
基本上我使用_client.stats().Indices来获取索引,并使用foreach排除索引列表进行过滤,如下所示:

public Dictionary<string, Stats> AllIndexes()
{
    _client = new ElasticClient(setting);
    var result = _client.Stats();
    var allIndex = result.Indices;
    var excludedIndexList = ExcludedIndexList();
    foreach (var index in excludedIndexList)
    {
        if (allIndex.ContainsKey(index)) allIndex.Remove(index);
    }

    return allIndex;
}

这是从Elasticsearch中列出所有索引的正确方法吗?或者有更好的方法吗?

eoxn13cs

eoxn13cs1#

GetIndexAsyncAssembly Nest, Version=7.0.0.0中删除从Version=7.0.0.0中删除您可以使用以下命令:

var result = await _client.Indices.GetAsync(new GetIndexRequest(Indices.All));
sauutmhj

sauutmhj2#

这是可行的,一种稍微性感的写作方式是在result.Indices上使用.Except()
另一种方法是使用.CatIndices()
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cat-indices.html

u4vypkhs

u4vypkhs3#

代码Assembly Nest, Version=6.0.0.0如下

var result = await _client.GetIndexAsync(null, c => c
                                     .AllIndices()
                             );

你将得到结果在result.Indices.Keys字符串列表

kcrjzv8t

kcrjzv8t4#

在Version=7.0.0.0中,方法GetIndexAsync不再接受null。解决方案:

var response = await _searchClient.Cat.IndicesAsync(c => c.AllIndices());
var logIndexes = response.Records.Select(a => a.Index).ToArray();
mqxuamgl

mqxuamgl5#

以防万一有人还在寻找...与巢7.* 我结束了:

public async Task<IReadonlyList<string>> GetIndicesByPattern(string indexNamePrefix)
{
    CatResponse<CatIndicesRecord>? result = await esClient.Cat.IndicesAsync(i => i.index(indexNamePrefix));
    return result.Records.Select(i => i.Index).ToList();
}

相关问题