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

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

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

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/1.x/indices-

aliases.html#alias-

retrieving

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

回答:

在使用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中指定的索引的别名

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

以上是 ElasticSeach JAVA API查找给定索引的别名 的全部内容, 来源链接: utcz.com/qa/430146.html

回到顶部