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