为什么我不能通过Java API连接到ElasticSearch?

我无法通过Java API连接到原始ElasticSearch集群。

复制:

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

}'

结果:

{

"ok": true,

"_index": "twitter",

"_type": "tweet",

"_id": "1",

"_version": 3

}


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

结果:

{

"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"

}

}

]

}

}

因此,一切都可以通过HTTP运行。通过Java尝试(每个页面):

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

}

我得到以下堆栈跟踪:

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)

与最接近的事我发现,到目前为止,这个问题是在这里,但线程落后了,但未得到解决。

回答:

TransportClient的默认端口为9300。您必须在Java代码中使用它而不是9200。这可能是连接失败的原因。

以上是 为什么我不能通过Java API连接到ElasticSearch? 的全部内容, 来源链接: utcz.com/qa/419543.html

回到顶部