如何使用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中指定的索引的别名
希望它能对某人有所帮助!