小编典典

ElasticSeach JAVA API查找给定索引的别名

elasticsearch

如何使用Java在ElasticSearch中查找给定索引的别名?

通过使用REST API,这非常容易

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/1.x/indices-
aliases.html#alias-
retrieving

但是我无法找到有关如何通过Java API进行操作的良好参考。


阅读 1013

收藏
2020-06-22

共1个答案

小编典典

在使用ElasticSearch时,我遇到一个问题,需要根据提供的索引获取别名列表。

获得别名列表非常简单:

 client.admin().cluster()
    .prepareState().execute()
    .actionGet().getState()
    .getMetaData().aliases();

我努力寻找一种简单的方法来获得给定索引的别名,而不必首先遍历所有内容。

我的第一个实现看起来像这样:

    ImmutableOpenMap<String, ImmutableOpenMap<String, AliasMetaData>> aliases = client.admin().cluster()
        .prepareState().execute()
        .actionGet().getState()
        .getMetaData().aliases();

    for (ObjectCursor<String> key: aliases.keys()) {
        ImmutableOpenMap<String, AliasMetaData> indexToAliasesMap = client.admin().cluster()
          .state(Requests.clusterStateRequest())
          .actionGet().getState()
          .getMetaData().aliases().get(key.value);

        if(indexToAliasesMap != null && !indexToAliasesMap.isEmpty()){
            String index= indexToAliasesMap.keys().iterator().next().value;
            String alias = indexToAliasesMap.values().iterator().next().value.alias();
        }
    }

我不喜欢它…经过一番摸索,我能够通过查看RestGetIndicesAliasesAction(软件包org.elasticsearch.rest.action.admin.indices.alias.get)来更有效地做到这一点。

这就是我最终得到的结果:

    ClusterStateRequest clusterStateRequest = Requests.clusterStateRequest()
            .routingTable(false)
            .nodes(false)
            .indices("your_index_name_goes_here");

    ObjectLookupContainer<String> setAliases= client
            .admin().cluster().state(clusterStateRequest)
            .actionGet().getState().getMetaData()
            .aliases().keys();

您将能够找到在setAliases中指定的索引的别名

希望它能对某人有所帮助!

2020-06-22