【问题标题】:Get Amazon Elasticsearch data in Java使用 Java 获取 Amazon Elasticsearch 数据
【发布时间】:2016-01-12 07:15:02
【问题描述】:

我正在尝试检索更新删除来自 Amazon Elasticsearch 的数据。为了从 Amazon Elasticsearch Service 获取数据,我使用了官方的 Java APIwww.elastic.co,但我无法弄清楚我的 Java 代码有什么问题。

另外,我不是 AWS 专家。但是当我在浏览器中打开 search-testing-xxxxxxxxxxxxxx.ap-xxxxxxx-1.es.amazonaws.com url 时,它会提供响应。同样的 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)

【问题讨论】:

    标签: java amazon-web-services elasticsearch


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多