【问题标题】:How to get the cluster state or index metadata using RestHighLevelClient?如何使用 RestHighLevelClient 获取集群状态或索引元数据?
【发布时间】:2020-12-15 01:54:21
【问题描述】:

我正在将应用程序从 TransportClient 迁移到 RestHighLevelClient。现在我有以下获取索引元数据的方法:

public IndexMetaData getIndexMetaData(String indexAlias) {
    ClusterState state = transportClient.admin().cluster().prepareState()
                             .setIndices(new String[]{indexAlias})
                             .execute()
                             .actionGet()
                             .getState();
    Set<String> indices = getIndicesByAlias(indexAlias);
    if (indices.size() > 0) {
        return state.metaData().index(indices.iterator().next());
    }
    else {
        return null;
    }
}

基于https://github.com/elastic/elasticsearch/issues/27205RestHighLevelClient 不支持获取集群状态。

如何使用RestHighLevelClient替换上述方法?

【问题讨论】:

    标签: java elasticsearch resthighlevelclient


    【解决方案1】:

    如果我理解正确,您有一个别名并想要获取它背后的所有索引吗? GetAliasesRequest 应该可以做到这一点。

    试试这样的:

    GetAliasesResponse getAliasResponse =
       client.indices().getAlias(new GetAliasesRequest("alias"),
                                 RequestOptions.DEFAULT);
    getAliasResponse.getAliases().keySet(); //key has the indices, value the aliases
    

    PS:您可能需要为existsAlias() 添加检查。

    【讨论】:

    • 我想获取特定索引的IndexMetaData,而不是索引别名。有没有办法使用RestHighLevelClient 来实现这一点?
    • 我认为现在不支持。但你到底想做什么?另一种方法是回退到低级别的 REST 客户端,但您需要手动处理响应。
    • 该方法是其他组件正在使用的库的一部分,因此我试图保持其签名完整,以免影响其调用者。老实说,我不明白 Elasticsearch 团队为什么要推RestHighLevelClient,如果它不提供旧客户端的所有功能。这和类型存在检查是此类缺失 API 的 2 个示例。
    • 你的意思是_type?因为该功能已在 7.0 中删除。并且应该很少有你不得不陷入集群状态的用例。这更像是通过低级 REST 客户端对逃生舱进行清理。
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 2015-07-01
    • 2021-01-28
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多