http://stackoverflow.com/questions/31170105/elasticseach-java-api-to-find-aliases-given-index
How to find aliases for given index in ElasticSearch using Java?
By using REST API it is pretty easy
https://www.elastic.co/guide/en/elasticsearch/reference/1.x/indices-aliases.html#alias-retrieving
While working with ElasticSearch, I ran into an issue where I needed to get a list of aliases based on provided index.
While getting a list of aliases is pretty straightforward:
While getting a list of aliases is pretty straightforward:
client.admin().cluster()
.prepareState().execute()
.actionGet().getState()
.getMetaData().aliases();
While working with ElasticSearch, I ran into an issue where I needed to get a list of aliases based on provided index.
While getting a list of aliases is pretty straightforward:
My first implementation looked something like this:
This is what I end up with:
Hope it helps someone!
While getting a list of aliases is pretty straightforward:
client.admin().cluster()
.prepareState().execute()
.actionGet().getState()
.getMetaData().aliases();
I struggled to find an easy way to be able to get aliases for given index without having to iterate through everything first.My first implementation looked something like this:
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();
}
}
I did not like it... and after poking around, I was able to get an
idea on how to do it more efficiently by looking at
RestGetIndicesAliasesAction (package
org.elasticsearch.rest.action.admin.indices.alias.get)This is what I end up with:
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();
You will be able to find aliases for the index that you specified in setAliasesHope it helps someone!
No comments:
Post a Comment