2016-01-12 42 views
1

获取亚马逊Elasticsearch数据我想检索更新从亚马逊Elasticsearch删除数据。从Amazon Elasticsearch服务获取数据我使用的是www.elastic.co的官方Java API,但我无法弄清楚我的Java代码中出现了什么问题。在Java中

另外我并不是AWS的专家。但是当我在浏览器中打开search-testing-xxxxxxxxxxxxx.ap-xxxxxxx-1.es.amazonaws.com url时,它会提供响应。同样的网址适用于PHP中的所有操作。

如果有另一个库连接Amazon Elasticsearch,请使用示例提供链接。

的源代码

import java.net.InetAddress; 

import org.elasticsearch.action.get.GetResponse; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.transport.InetSocketTransportAddress; 

public class ElasticSearchExample { 

    public static void main(String[] args) throws Exception{ 
     Settings settings = Settings.settingsBuilder() 
       .put("cluster.name", "34xxxxxxx:testing") 
       .put("http.enabled", true).build(); 

     Client client = TransportClient 
       .builder() 
       .settings(settings) 
       .build() 
       .addTransportAddress(
         new InetSocketTransportAddress(
           InetAddress 
             .getByName("search-testing-xxxxxxxxxxxxx.ap-xxxxxxx-1.es.amazonaws.com"), 
           80)); 

     GetResponse response = client.prepareGet("inventory", "parent", "7874").get(); 
     System.out.println(response); 
     client.close(); 
    } 
} 

输出

Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{xx.xxx.xxx.x}{search-testing-xxxxxxxxxxxxx.ap-xxxxxxx-1.es.amazonaws.com/xx.xxx.xxx.x:80}]] 
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290) 
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207) 
    at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) 
    at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:283) 
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) 
    at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:67) 
    at ElasticSearchExample.main(ElasticSearchExample.java:28) 

回答

2

亚马逊Elasticsearch服务的工作完全通过HTTP和你试图通过传输客户端,在通过TCP连接到它。

可以使用任何其它的Java HTTP客户端库,如Apache HTTP客户端或更高级别的Spring的RestTemplate,如下图所示

// create the REST template 
RestTemplate rest = new RestTemplate() 

// define URL to fetch 
String url = "http://search-testing-xxxxxxxxxxxxx.ap-xxxxxxx-1.es.amazonaws.com/inventory/parent/7874"; 

// make the request 
ResponseEntity<String> resp = rest.exchange(url, HttpMethod.GET, null, String.class) 

// retrieve the JSON response 
String body = resp.getBody();