Comment trouver Index par alias dans Elasticsearch java api?

La réindexation prend 30 secondes et je ne veux pas que ma recherche soit hors ligne pendant 30 secondes chaque fois que je dois réindexer. J’essaie de faire ceci:

  1. Trouver l’ancien index avec alias = abc123
  2. Créer un nouvel index et remplir avec de nouvelles données
  3. Supprimer un alias et supprimer l’ancien index
  4. Donner un nouvel index alias = abc123

Je n’arrive pas à trouver un code java qui le fasse 1). Tout le rest va bien. N’importe qui? ou y a-t-il un autre moyen qui est meilleur?

Utiliser Elasticsearch 0.90.9.

Vous pouvez utiliser ceci pour obtenir tous les alias:

client.admin().cluster() .prepareState().execute() .actionGet().getState() .getMetaData().getAliases(); 

Cela renvoie une carte avec le nom d’index comme key et les aliases comme valeur. Vous pouvez donc parcourir la carte pour obtenir le nom de l’index.

Voici la méthode de référence pour trouver tous les index dans un aliasName donné:

 public Set getIndicesFromAliasName(Ssortingng 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; } 

une meilleure solution serait, la carte aura des index comme clés

 GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesResponse var = client.admin().indices().getAliases(new GetAliasesRequest("merged")).actionGet(); ImmutableOpenMap> v1 = var.getAliases(); 

Avec la dernière API, la réponse acceptée ne fonctionne plus. Solution similaire utilisant le dernier client (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(); } 

Vous pouvez également utiliser l’API esClient.admin().indices().prepareGetAliases(ALIAS_NAME).get().getAliases(); comme esClient.admin().indices().prepareGetAliases(ALIAS_NAME).get().getAliases(); : esClient.admin().indices().prepareGetAliases(ALIAS_NAME).get().getAliases();

La clé de la carte résultante est le nom d’index auquel l’alias donné correspond.

 private Ssortingng getIndexNameFromAliasName(final Ssortingng 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; }