package focusedCrawler.target.repository.elasticsearch; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings.Builder; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ElasticSearchClientFactory { private static final Logger logger = LoggerFactory.getLogger(ElasticSearchClientFactory.class); private static Node clientNode; private static Client client; @SuppressWarnings("resource") public static Client createClient(ElasticSearchConfig config) { if (client != null) { return client; } String elasticSearchHost = config.getHost(); int elasticSearchPort = config.getPort(); String clusterName = config.getClusterName(); Builder settingsBuilder = ImmutableSettings.settingsBuilder(); if (clusterName != null) { settingsBuilder.put("cluster.name", clusterName); } Settings settings = settingsBuilder.build(); if (elasticSearchHost != null) { logger.info("Creating a ElasticSearch TransportClient for address: {}:{}", elasticSearchHost, elasticSearchPort); int port = elasticSearchPort != 0 ? elasticSearchPort : 9300; InetSocketTransportAddress socketAddress = new InetSocketTransportAddress( elasticSearchHost, port); client = new TransportClient(settings).addTransportAddress(socketAddress); return client; } else { logger.info("Creating a ElasticSearch Node Client for address: %s:%s", elasticSearchHost, elasticSearchPort); clientNode = NodeBuilder.nodeBuilder().client(true).settings(settings).node(); client = clientNode.client(); return client; } } public void closeClient() { if (client != null) { client.close(); } if (clientNode != null) { clientNode.close(); } } }