如何使用 Elastic 的高级 Rest 客户端获取所有索引?
2022-09-04 05:42:08
我想要一种很好,快速,简单的方法来使用他们的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;
}
}
从本质上讲,我只是按照他们的文档中的建议调用端点。这工作正常,但我想知道是否有更好的方法来使用Java API来做到这一点。我似乎无法在他们当前的API中找到方法,但想知道是否有人知道我不知道的东西。必须使用s和各种s并不一定很糟糕,但只是想清理黑客字符串解析。/_cat/indices?v
InputStream
Reader