[英]How to find indexes by alias name in elasticsearch 6.1.1 java api
[英]How to find Index by Alias in Elasticsearch java api?
重新索引需要30秒,每次我需要重新索引時,我不希望我的搜索離線30秒。 我正在嘗試這樣做:
我似乎無法找到任何1代碼的java代碼。 其他一切都很好。 任何人? 還是有另一種方式更好?
使用Elasticsearch 0.90.9。
以下是查找給定aliasName中所有索引的參考方法:
public Set<String> getIndicesFromAliasName(String aliasName) {
IndicesAdminClient iac = client.admin().indices();
ImmutableOpenMap<String, List<AliasMetaData>> map = iac.getAliases(new GetAliasesRequest(aliasName))
.actionGet().getAliases();
final Set<String> allIndices = new HashSet<>();
map.keysIt().forEachRemaining(allIndices::add);
return allIndices;
}
您可以使用它來獲取所有別名:
client.admin().cluster()
.prepareState().execute()
.actionGet().getState()
.getMetaData().getAliases();
這將返回一個映射,其中索引名稱為key
, aliases
為值。 因此,您可以迭代地圖以獲取索引名稱。
一個更好的解決方案是,地圖將索引作為鍵
GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesRequest("merged")).actionGet();
ImmutableOpenMap<String, List<AliasMetaData>> v1 = var.getAliases();
使用最新的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();
生成的映射的鍵是給定別名映射到的索引名稱。
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.