[[client]] == Client You can use the *Java client* in multiple ways: * Perform standard <>, <>, <> and <> operations on an existing cluster * Perform administrative tasks on a running cluster Obtaining an elasticsearch `Client` is simple. The most common way to get a client is by creating a <> that connects to a cluster. *Important:* ______________________________________________________________________________________________________________________________________________________________ Please note that you are encouraged to use the same version on client and cluster sides. You may hit some incompatibility issues when mixing major versions. ______________________________________________________________________________________________________________________________________________________________ [[transport-client]] === Transport Client The `TransportClient` connects remotely to an Elasticsearch cluster using the transport module. It does not join the cluster, but simply gets one or more initial transport addresses and communicates with them in round robin fashion on each action (though most actions will probably be "two hop" operations). [source,java] -------------------------------------------------- // on startup Client client = TransportClient.builder().build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300)) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300)); // on shutdown client.close(); -------------------------------------------------- Note that you have to set the cluster name if you use one different than "elasticsearch": [source,java] -------------------------------------------------- Settings settings = Settings.settingsBuilder() .put("cluster.name", "myClusterName").build(); Client client = TransportClient.builder().settings(settings).build(); //Add transport addresses and do something with the client... -------------------------------------------------- The client allows sniffing the rest of the cluster, which adds data nodes into its list of machines to use. In this case, note that the IP addresses used will be the ones that the other nodes were started with (the "publish" address). In order to enable it, set the `client.transport.sniff` to `true`: [source,java] -------------------------------------------------- Settings settings = Settings.settingsBuilder() .put("client.transport.sniff", true).build(); TransportClient client = TransportClient.builder().settings(settings).build(); -------------------------------------------------- Other transport client level settings include: [cols="<,<",options="header",] |======================================================================= |Parameter |Description |`client.transport.ignore_cluster_name` |Set to `true` to ignore cluster name validation of connected nodes. (since 0.19.4) |`client.transport.ping_timeout` |The time to wait for a ping response from a node. Defaults to `5s`. |`client.transport.nodes_sampler_interval` |How often to sample / ping the nodes listed and connected. Defaults to `5s`. |======================================================================= [[client-connected-to-client-node]] === Connecting a Client to a Coordinating Only Node You can start locally a {ref}/modules-node.html#coordinating-only-node[Coordinating Only Node] and then simply create a <> in your application which connects to this Coordinating Only Node. This way, the coordinating only node will be able to load whatever plugin you need (think about discovery plugins for example).