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

我想要一种很好、快速和简单的方法来使用他们的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


慕森王
浏览 627回答 3
3回答

繁星点点滴滴

从 Elasticsearch 7.5.0 开始,您可以使用以下内容来检索所有索引:&nbsp;&nbsp;&nbsp;&nbsp;GetIndexRequest&nbsp;request&nbsp;=&nbsp;new&nbsp;GetIndexRequest("*"); &nbsp;&nbsp;&nbsp;&nbsp;GetIndexResponse&nbsp;response&nbsp;=&nbsp;client.indices().get(request,&nbsp;RequestOptions.DEFAULT); &nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;indices&nbsp;=&nbsp;response.getIndices();

浮云间

在 es 6.8 上,当没有索引时使用*or _allinGetIndexRequest会抛出 NoSuchIndexException。我发现这是更安全的,没有扔的方式:&nbsp; &nbsp; GetMappingsResponse response = esClient.indices().getMapping(new GetMappingsRequest().indices("*"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RequestOptions.DEFAULT);&nbsp; &nbsp; return new ArrayList<>(response.mappings().keySet());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java