重新索引需要30秒,每次我需要重新索引时,我不希望我的搜索离线30秒。我正在尝试这样做:
我似乎无法找到任何1代码的java代码。其他一切都很好。任何人?还是有另一种方式更好?
使用Elasticsearch 0.90.9。
答案 0 :(得分:10)
您可以使用它来获取所有别名:
client.admin().cluster()
.prepareState().execute()
.actionGet().getState()
.getMetaData().getAliases();
这将返回一个地图,其中索引名称为key
,aliases
为值。因此,您可以迭代地图以获取索引名称。
答案 1 :(得分:4)
更好的解决方案是,地图将索引作为键
GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesRequest("merged")).actionGet();
ImmutableOpenMap<String, List<AliasMetaData>> v1 = var.getAliases();
答案 2 :(得分:4)
使用最新的API,接受的答案不再有效。使用最新客户端(5.2.0)的类似解决方案:
SortedMap<String, AliasOrIndex> 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();
生成的映射的键是给定别名映射到的索引名称。
答案 3 :(得分:2)
private String getIndexNameFromAliasName(final String aliasName) {
ImmutableOpenMap<String, AliasMetaData> 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;
}