如何在Elasticsearch java api中找到Alias索引?
重新索引需要30秒,每次我需要重新索引时,我不希望我的搜索离线30秒。 我正在尝试这样做:
- 查找alias = abc123的旧索引
- 创建新索引并填充新数据
- 删除别名并删除旧索引
- 给新索引别名= abc123
我似乎无法找到任何1)的java代码。 其他一切都很好。 任何人? 还是有另一种方式更好?
使用Elasticsearch 0.90.9。
您可以使用它来获取所有别名:
client.admin().cluster() .prepareState().execute() .actionGet().getState() .getMetaData().getAliases();
这将返回一个映射,其中索引名称为key
, aliases
为值。 因此,您可以迭代地图以获取索引名称。
以下是查找给定aliasName中所有索引的参考方法:
public Set getIndicesFromAliasName(String aliasName) { IndicesAdminClient iac = client.admin().indices(); ImmutableOpenMap> map = iac.getAliases(new GetAliasesRequest(aliasName)) .actionGet().getAliases(); final Set allIndices = new HashSet<>(); map.keysIt().forEachRemaining(allIndices::add); return allIndices; }
一个更好的解决方案是,地图将索引作为键
GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesRequest("merged")).actionGet(); ImmutableOpenMap> v1 = var.getAliases();
使用最新的API,接受的答案不再有效。 使用最新客户端(5.2.0)的类似解决方案:
SortedMap lookup = esClient.admin().cluster() .prepareState().execute() .actionGet().getState() .getMetaData().getAliasAndIndexLookup(); if (lookup.containsKey(ALIAS_NAME)) { lookup.get(ALIAS_NAME).getIndices().get(0).getIndex().getName(); }
或者,您可以像这样使用别名API: esClient.admin().indices().prepareGetAliases(ALIAS_NAME).get().getAliases();
生成的映射的键是给定别名映射到的索引名称。
private String getIndexNameFromAliasName(final String aliasName) { ImmutableOpenMap indexToAliasesMap = client.admin().cluster() .state(Requests.clusterStateRequest()) .actionGet() .getState() .getMetaData() .aliases().get(aliasName); if(indexToAliasesMap != null && !indexToAliasesMap.isEmpty()){ return indexToAliasesMap.keys().iterator().next().value; } return null; }
- 使用Java客户端和X-Pack / HTTPS连接到ElasticSearch Cloud 5.x.
- 在ElasticSearch中使用Java API时如何从JSON DSL构造QueryBuilder?
- 在弹性搜索中使用service install命令“JAVA_HOME指向无效的Java安装问题”
- 为什么我不能通过Java API连接到ElasticSearch?
- 使用Apache HttpComponents Client签署AWS HTTP请求
- ElasticSearch Java API:NoNodeAvailableException:没有可用的节点
- Elasticsearch,Max的映射类型长度很长
- 将弹性搜索从1.4.3迁移到2.4 java代码
- ElasticSearch TransportClient 5.6版