searchresponse query example ejemplo java elasticsearch

query - ¿Por qué no puedo conectarme a ElasticSearch a través de la API de Java?



searchresponse elasticsearch (2)

El puerto predeterminado de TransportClient es 9300. Tiene que usarlo en lugar de 9200 en su código de Java. Esta es probablemente la razón por la cual falla la conexión.

Tengo problemas para conectarme al clúster de ElasticSearch de vanilla a través de la API de Java.

Reproducir:

#start elasticsearch elasticsearch -f #checking in a new window $ curl -XPUT ''http://localhost:9200/twitter/tweet/1'' -d ''{/ "user" : "kimchy",/ "post_date" : "2009-11-15T14:12:12",/ "message" : "trying out Elastic Search"/ }''

resultado:

{ "ok": true, "_index": "twitter", "_type": "tweet", "_id": "1", "_version": 3 }

$ curl -XGET ''http://localhost:9200/twitter/tweet/_search?q=user:kimchy''

resultado:

{ "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 0.30685282, "hits": [ { "_index": "twitter", "_type": "tweet", "_id": "1", "_score": 0.30685282, "_source": { "user": "kimchy", "post_date": "2009-11-15T14:12:12", "message": "trying out Elastic Search" } } ] } }

Entonces, todo funciona a través de HTTP. Probando a través de Java (por esta página ):

public static void main(String[] args) { Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress("localhost", 9200)); IndexResponse response = null; try { response = client.prepareIndex("twitter", "tweet", "1") .setSource(XContentFactory.jsonBuilder() .startObject() .field("user", "john") .field("postDate", new Date()) .field("message", "who dont it work") .endObject() ) .execute() .actionGet(); } catch (ElasticSearchException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(response); }

Y obtengo el siguiente rastro de pila:

May 21, 2013 8:27:42 AM org.elasticsearch.plugins INFO: [Bes] loaded [], sites [] May 21, 2013 8:27:49 AM org.elasticsearch.client.transport INFO: [Bes] failed to get node info for [#transport#-1][inet[localhost/127.0.0.1:9200]], disconnecting... org.elasticsearch.transport.ReceiveTimeoutTransportException: [][inet[localhost/127.0.0.1:9200]][cluster/nodes/info] request_id [0] timed out after [5002ms] at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:342) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:680) Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: No node available at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:202) at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106) at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:84) at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:310) at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:315) at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:62) at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:57) at Scratch.main(Scratch.java:30)

Y lo más cercano que he encontrado hasta ahora a este problema está here , pero el hilo se perdió sin resolución.


import java.net.InetAddress; import java.net.UnknownHostException; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; public class ElasticsearchTest { public static void main(String[] argv) throws UnknownHostException{ /* //Set new cluester Settings settings = Settings.builder() .put("cluster.name", "newCluster") .put("node.name","newNode").build();*/ //create cliet !!!Make sure keep settings empty if your cluster is the //same as the one you defined in your elasticsearch.yml file //Plus, port here(9300)must be different from your http port(9200) TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); //get data GetResponse response = client.prepareGet("twitter", "tweet", "1").execute().actionGet(); //output System.out.println(response.getSourceAsString()); client.close(); } }