У меня есть экземпляр ES, работающий на AWS, и я хочу подключиться к нему с помощью JAVA API.
TransportClient client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9320));
List<DiscoveryNode> nodes = client.connectedNodes();
System.out.println(nodes.size()); // prints 0
for (DiscoveryNode node : nodes) {
System.out.println(node.toString());
}
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("indexName");
String postQuery = "{ some stuff }";
searchRequestBuilder.setQuery(QueryBuilders.wrapperQuery(postQuery));
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
System.out.println(searchResponse.toString().replace("\n\n", "\n"));
Когда я запускаю эту программу, я получаю:
NoNodeAvailableException[Ни один из настроенных узлов недоступен:
[{#transport#-1}{127.0.0.1}{localhost/127.0.0.1:9320}]
Я туннелировал в экземпляр, где порт TCP — 9320
, а порт REST — 9220
.
animesh$ lsof -i :9320
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 44239 animesh 7u IPv6 ______ 0t0 TCP localhost:9320 (LISTEN)
ssh 44239 animesh 8u IPv4 ______ 0t0 TCP localhost:9320 (LISTEN)
animesh$ curl localhost:9220
{
"name" : "SuperNode",
"cluster_name" : "SuperCluster",
"version" : {
"number" : "2.3.0",
"build_hash" : "8371be8d5fe5df7fb9c0516c474d77b9feddd888",
"build_timestamp" : "2016-03-29T07:54:48Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
TransportClient
требуется TCP-соединение - person Animesh Pandey   schedule 20.05.2016SuperCluster
. Не знаю, нужно ли указывать это в программе? - person Animesh Pandey   schedule 20.05.2016