| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | [[client]]== ClientYou can use the *Java client* in multiple ways:* Perform standard <<java-docs-index,index>>, <<java-docs-get,get>>,  <<java-docs-delete,delete>> and <<java-search,search>> operations on an  existing cluster* Perform administrative tasks on a running clusterObtaining an Elasticsearch `Client` is simple. The most common way toget a client is by creating a <<transport-client,`TransportClient`>>that connects to a cluster.[IMPORTANT]==============================The client must have the same major version (e.g. `2.x`, or `5.x`) as thenodes in the cluster. Clients may connect to clusters which have a differentminor version (e.g. `2.3.x`) but it is possible that new functionality may notbe supported.  Ideally, the client should have the same version as thecluster.==============================[[transport-client]]=== Transport Clientdeprecated[7.0.0, The `TransportClient` is deprecated in favour of the {java-rest}/java-rest-high.html[Java High Level REST Client] and will be removed in Elasticsearch 8.0. The {java-rest}/java-rest-high-level-migration.html[migration guide] describes all the steps needed to migrate.]The `TransportClient` connects remotely to an Elasticsearch clusterusing the transport module. It does not join the cluster, but simplygets one or more initial transport addresses and communicates with themin round robin fashion on each action (though most actions will probablybe "two hop" operations).[source,java]--------------------------------------------------// on startupTransportClient client = new PreBuiltTransportClient(Settings.EMPTY)        .addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300))        .addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));// on shutdownclient.close();--------------------------------------------------Note that you have to set the cluster name if you use one different than"elasticsearch":[source,java]--------------------------------------------------Settings settings = Settings.builder()        .put("cluster.name", "myClusterName").build();TransportClient client = new PreBuiltTransportClient(settings);//Add transport addresses and do something with the client...--------------------------------------------------The Transport client comes with a cluster sniffing feature whichallows it to dynamically add new hosts and remove old ones.When sniffing is enabled, the transport client will connect to the nodes in itsinternal node list, which is built via calls to `addTransportAddress`.After this, the client will call the internal cluster state API on those nodesto discover available data nodes. The internal node list of the client willbe replaced with those data nodes only. This list is refreshed every five seconds by default.Note that the IP addresses the sniffer connects to are the ones declared as the 'publish'address in those node's Elasticsearch config.Keep in mind that the list might possibly not include the original node it connected toif that node is not a data node. If, for instance, you initially connect to amaster node, after sniffing, no further requests will go to that master node,but rather to any data nodes instead. The reason the transport client excludes non-datanodes is to avoid sending search traffic to master only nodes.In order to enable sniffing, set `client.transport.sniff` to `true`:[source,java]--------------------------------------------------Settings settings = Settings.builder()        .put("client.transport.sniff", true).build();TransportClient client = new PreBuiltTransportClient(settings);--------------------------------------------------Other transport client level settings include:[cols="<,<",options="header",]|=======================================================================|Parameter |Description|`client.transport.ignore_cluster_name` |Set to `true` to ignore clustername validation of connected nodes. (since 0.19.4)|`client.transport.ping_timeout` |The time to wait for a ping responsefrom a node. Defaults to `5s`.|`client.transport.nodes_sampler_interval` |How often to sample / pingthe nodes listed and connected. Defaults to `5s`.|=======================================================================[[client-connected-to-client-node]]=== Connecting a Client to a Coordinating Only NodeYou can start locally a {ref}/modules-node.html#coordinating-only-node[Coordinating Only Node]and then simply create a <<transport-client,`TransportClient`>> in yourapplication which connects to this Coordinating Only Node.This way, the coordinating only node will be able to load whatever plugin youneed (think about discovery plugins for example).
 |