如何在 Elasticsearch java api 中按别名查找索引?

2022-09-03 17:19:03

重新编制索引需要 30 秒,我不希望每次需要重新编制索引时搜索都脱机 30 秒。我正在尝试这样做:

  1. 查找别名 = abc123 的旧索引
  2. 创建新索引并填充新数据
  3. 删除别名和删除旧索引
  4. 给出新索引别名 = abc123

我似乎找不到任何java代码可以做到1)。其他一切都很好。任何人?还是有另一种更好的方法?

使用 Elasticsearch 0.90.9。


答案 1

以下是在给定别名中查找所有索引的参考方法:

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;
}

答案 2

您可以使用以下命令获取所有别名:

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

这将返回一个映射,其中索引名称为 the,而该映射为值。因此,您可以循环访问地图以获取索引名称。keyaliases


推荐