我想要一种很好、快速和简单的方法来使用他们的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();
浮云间
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());
添加回答
举报
0/150
提交
取消