簡體   English   中英

如何在Elasticsearch java api中找到Alias索引?

[英]How to find Index by Alias in Elasticsearch java api?

重新索引需要30秒,每次我需要重新索引時,我不希望我的搜索離線30秒。 我正在嘗試這樣做:

  1. 查找alias = abc123的舊索引
  2. 創建新索引並填充新數據
  3. 刪除別名並刪除舊索引
  4. 給新索引別名= abc123

我似乎無法找到任何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();

這將返回一個映射,其中索引名稱為keyaliases為值。 因此,您可以迭代地圖以獲取索引名稱。

一個更好的解決方案是,地圖將索引作為鍵

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM