为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Elastic 的 High Level Rest Client 获取所有索引?

如何使用 Elastic 的 High Level Rest Client 获取所有索引?

慕森王 2021-08-04 16:47:29
我想要一种很好、快速和简单的方法来使用他们的Java REST 客户端获取 elasticsearch 中的所有索引。我目前可以通过抓取他们的低级客户端来做到这一点,如下所示:public void fetchIndices() throws IOException {    List<String> indices = null;    RestClient restClient = client.getLowLevelClient();    Response response = null;    try {        response = restClient.performRequest("GET", "/_cat/indices?v");    } catch (IOException e) {        LOGGER.log(Level.WARNING, e.toString(), e);    }    InputStream inputStream = null;    if (response != null) {        try {            inputStream = response.getEntity().getContent();        } catch (IOException e) {            LOGGER.log(Level.WARNING, e.toString(), e);        }    }    if (inputStream != null) {        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);        indices = new ArrayList<>();        String line;        while ((line = bufferedReader.readLine()) != null) {            // Get tokens with no whitespace            String[] tokens = line.split("\\s+");            for (String token : tokens) {                // TODO - make the startsWith() token configurable                if (token.startsWith(SOME_TOKEN)) {                    LOGGER.log(Level.INFO, "Found elasticsearch index " + token);                    indices.add(token);                    break;                }            }        }    }    // Only update if we got data back from our REST call    if (indices != null) {        this.indices = indices;    }}基本上我只是按照他们的文档中的建议调用/_cat/indices?v端点。这工作正常,但我想知道是否有更好的方法使用 Java API 来做到这一点。我似乎无法在他们当前的 API 中找到方法,但想知道是否有人知道我不知道的事情。必须与s 和各种s一起工作并不一定很糟糕,但只想清理 hacky 字符串解析。InputStreamReader
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

从 Elasticsearch 7.5.0 开始,您可以使用以下内容来检索所有索引:

    GetIndexRequest request = new GetIndexRequest("*");
    GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
    String[] indices = response.getIndices();


查看完整回答
反对 回复 2021-08-04
?
浮云间

TA贡献1829条经验 获得超4个赞

在 es 6.8 上,当没有索引时使用*or _allinGetIndexRequest会抛出 NoSuchIndexException。


我发现这是更安全的,没有扔的方式:


    GetMappingsResponse response = esClient.indices().getMapping(new GetMappingsRequest().indices("*"),

            RequestOptions.DEFAULT);

    return new ArrayList<>(response.mappings().keySet());


查看完整回答
反对 回复 2021-08-04
  • 3 回答
  • 0 关注
  • 626 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信