2013-05-21 14 views
24

Java API aracılığıyla vanilla ElasticSearch kümesine bağlanıyorum.Neden Java API aracılığıyla ElasticSearch'e bağlanamıyorum?

yeniden oluşturmak için:

#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"\ 
}' 

sonucu:

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

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

sonucu: Yani

{ 
    "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" 
     } 
     } 
    ] 
    } 
} 

, her şeyi HTTP üzerinden çalışır.

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); 
} 

Ve şu yığın izleme almak: (this page başına) Java üzerinden çalışılıyor Ben şimdiye kadar bu sorunun here olduğunu tespit ettik

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) 

Ve en yakın şey, ama iplik sustu çözünürlük olmadan

+0

aşağıdaki hatayı alıyorum "ana" java.lang.VerifyError. sınıf org.elasticsearch.transport.Netty3Plugin nihai yöntem onModule geçersiz kılar (Lorg/elasticsearch/ortak/ağ/NetworkModule;) V –

cevap

67

TransportClient varsayılan bağlantı noktası 9300'dur. Java kodunuzda 9200 yerine kullanmak zorundasınız. Bu muhtemelen bağlantının neden başarısız olduğu. Elastik aramayı kullanarak dizisindeki @jnBrymn İstisna yardımcı olabilir iken

+1

Ve ... bunu yaptı! Elasticsearch örneği 9300 var. Tahmin ettiğim gibi değiştirmeliler. – JnBrymn

+0

@JohnBerryman Hangi örnekten bahsediyorsunuz? – javanna

+0

Görünüşe göre çok kafam karıştı. Bu örnekte tekrar kontrol ettim ve gerçekten de 9200. Bu yüzden hayal ettim! – JnBrymn

0
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(); 
     } 
    } 
+0

kodunuza bazı açıklamaları açıklayın veya ekleyin, öğrenenler için daha yararlı olacaktır. – HDJEMAI