Elasticsearch REST JAVA Client for Cluster Detail

Below is example to get Cluster Detail in Java Object by using Elasticsearch REST Java client. Here client will call endpoint  “/_cluster/health” to retrieve all detail of index list. It is same as we use GET by CURL

GET http://elasticsearchHost:9200/_cluster/health


  • Minimum requirement for Java 7 version required.
  • Add below dependency for Elasticsearch REST and JSON Mapping in your pom.xml or add in your class path.


<!--Elasticsearch REST jar-->
<!--Jackson jar for mapping json to Java -->

Sample Code

import java.io.IOException;
import java.util.Collections;

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;

import com.fasterxml.jackson.databind.ObjectMapper;

public class ElasticsearchRESTClusterClient {

	public static void main(String[] args) {
		ClusterInfo clusterHealth = null;
		RestClient client = null;
		try {
			client = openConnection();
			if (client != null) {
				// performRequest GET method will retrieve all cluster health
				// information from elastic server
				Response response = client.performRequest("GET", "/_cluster/health",
						Collections.singletonMap("pretty", "true"));
				// GetEntity api will return content of response in form of json
				// in Http Entity
				HttpEntity entity = response.getEntity();
				ObjectMapper jacksonObjectMapper = new ObjectMapper();
				// Map json response to Java object in ClusterInfo
				// Cluster Info
				clusterHealth = jacksonObjectMapper.readValue(entity.getContent(), ClusterInfo.class);

		} catch (Exception ex) {
			System.out.println("Exception found while getting cluster detail");
		} finally {


	// Get Rest client connection
	private static RestClient openConnection() {
		RestClient client = null;
		try {
			final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
			credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("userId", "password"));
			client = RestClient.builder(new HttpHost("elasticHost", Integer.parseInt("9200")))
					.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
						// Customize connection as per requirement
						public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
							return httpClientBuilder
									// Credentials
									// Proxy
									.setProxy(new HttpHost("ProxyServer", 8080));


		} catch (Exception ex) {
		return client;

	// Close Open connection
	private static void closeConnnection(RestClient client) {
		if (client != null) {
			try {
			} catch (IOException ex) {


Cluster Info Java Object where retrieve json response will map.

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)
public class ClusterInfo {

@JsonProperty(value = "cluster_name")
private String clusterName;
@JsonProperty(value = "status")
private String clusterStatus;
@JsonProperty(value = "active_primary_shards")
private int primaryActiveShards;
@JsonProperty(value = "active_shards")
private int activeShards;
@JsonProperty(value = "delayed_unassigned_shards")
private int delayedUnAssignedShards;
@JsonProperty(value = "unassigned_shards")
private int unAssignedShards;
@JsonProperty(value = "initializing_shards")
private int initializingShards;
@JsonProperty(value = "relocating_shards")
private int relocatingShards;
@JsonProperty(value = "number_of_nodes")
private int totalNodeCount;
@JsonProperty(value = "number_of_data_nodes")
private int dataNodeCount;

public String toString()
	StringBuffer str=new StringBuffer(60);
	str.append("    \"").append("clusterName").append("\":\"").append(clusterName).append("\",\n");
	str.append("    \"").append("clusterStatus").append("\":\"").append(clusterStatus).append("\",\n");
	str.append("    \"").append("primaryActiveShards").append("\":\"").append(primaryActiveShards).append("\",\n");
	str.append("    \"").append("activeShards").append("\":\"").append(activeShards).append("\",\n");
	str.append("    \"").append("delayedUnAssignedShards").append("\":\"").append(delayedUnAssignedShards).append("\",\n");
	str.append("    \"").append("unAssignedShards").append("\":\"").append(unAssignedShards).append("\",\n");
	str.append("    \"").append("initializingShards").append("\":\"").append(initializingShards).append("\",\n");
	str.append("    \"").append("relocatingShards").append("\":\"").append(relocatingShards).append("\",\n");
	str.append("    \"").append("totalNodeCount").append("\":\"").append(totalNodeCount).append("\",\n");
	str.append("    \"").append("dataNode").append("\":\"").append(dataNodeCount).append("\"");
	str.append("    \"");
	return str.toString();

public String getClusterName() {
	return clusterName;
public void setClusterName(String clusterName) {
	this.clusterName = clusterName;
public String getClusterStatus() {
	return clusterStatus;
public void setClusterStatus(String clusterStatus) {
	this.clusterStatus = clusterStatus;
public int getPrimaryActiveShards() {
	return primaryActiveShards;
public void setPrimaryActiveShards(int primaryActiveShards) {
	this.primaryActiveShards = primaryActiveShards;
public int getActiveShards() {
	return activeShards;
public void setActiveShards(int activeShards) {
	this.activeShards = activeShards;
public int getDelayedUnAssignedShards() {
	return delayedUnAssignedShards;
public void setDelayedUnAssignedShards(int delayedUnAssignedShards) {
	this.delayedUnAssignedShards = delayedUnAssignedShards;
public int getUnAssignedShards() {
	return unAssignedShards;
public void setUnAssignedShards(int unAssignedShards) {
	this.unAssignedShards = unAssignedShards;
public int getInitializingShards() {
	return initializingShards;
public void setInitializingShards(int initializingShards) {
	this.initializingShards = initializingShards;
public int getRelocatingShards() {
	return relocatingShards;
public void setRelocatingShards(int relocatingShards) {
	this.relocatingShards = relocatingShards;
public int getDataNodeCount() {
	return dataNodeCount;
public void setDataNodeCount(int dataNodeCount) {
	this.dataNodeCount = dataNodeCount;
public int getTotalNodeCount() {
	return totalNodeCount;
public void setTotalNodeCount(int totalNodeCount) {
	this.totalNodeCount = totalNodeCount;

Read More on Elasticsearch REST


Integrate Filebeat, Kafka, Logstash, Elasticsearch and Kibana


About Saurabh Gupta

My Name is Saurabh Gupta, I have approx. 11 Year of experience in Information Technology World manly in Java/J2EE. During this time I have worked with multiple organization with different client, so many technology, frameworks etc.
This entry was posted in Elasticsearch, REST and tagged , , , , , . Bookmark the permalink.

5 Responses to Elasticsearch REST JAVA Client for Cluster Detail

  1. Pingback: Elasticsearch REST JAVA Client to get Index Details List | Facing Issues On IT

  2. Pingback: Elasticsearch REST Response Handling | Facing Issues On IT

  3. Pingback: Elasticsearch REST Synchronous and Asynchronous performRequest APIs | Facing Issues On IT

  4. Pingback: Elasticsearch REST Java Connection Client | Facing Issues On IT

  5. Pingback: Elasticsearch REST JAVA API | Facing Issues On IT

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s