工作有個業務需求是需要獲取ES中的所有索引名,之前是使用TransportClent去獲取,但是ES加密了,而且TransportClient官方也不推薦使用,所以用了RestHighLevelClient去獲取。
版本如下:
jdk版本:1.8
elasticsearch.client版本:6.4.0
附上代碼:
這是獲取高級客戶端的方法
@Getter @Setter
private static RestHighLevelClient restClient = null;
public static RestHighLevelClient getClient() {
try {
if(restClient != null){
return restClient;
}
synchronized (ESConnection.class) {
if(restClient != null){
return restClient;
}
// 用戶認證對象
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
// 設置賬號密碼
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("賬號", "密碼"));
// 創建rest client對象
RestClientBuilder builder = RestClient.builder(new HttpHost("ES的IP地址", ES的端口,不是節點端口))
.setHttpClientConfigCallback(new HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
restClient = new RestHighLevelClient(builder);
return restClient;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
以下是查詢方法
public static void main(String[] args) {
RestHighLevelClient restClient = getClient();
try {
GetAliasesRequest request = new GetAliasesRequest();
GetAliasesResponse getAliasesResponse = restClient.indices().getAlias(request,RequestOptions.DEFAULT);
Map<String, Set<AliasMetaData>> map = getAliasesResponse.getAliases();
Set<String> indices = map.keySet();
for (String key : indices) {
System.out.println(key);
}
} catch (IOException e) {
e.printStackTrace();
}
}
運行結果如圖:
以上就是使用HighLevelClient獲取所有索引名字的方法。