【问题标题】:How to connect to AWS Elasticsearch?如何连接到 AWS Elasticsearch?
【发布时间】:2016-01-29 12:00:46
【问题描述】:

我正在尝试连接到 AWS Elasticsearch,但我总是收到以下错误:

Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:278)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197)
at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106)
at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:98)
at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:334)
at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:313)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65)
at com.c_backendcrawler.utility.ElasticSearch.uploadObject(ElasticSearch.java:25)
at com.c_backendcrawler.Start.main(Start.java:34)

我的代码如下:

 //Create Client
    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "zencubes-search").put("node.name","Darkhawk").build();
    TransportClient transportClient = new TransportClient(settings);
    transportClient.addTransportAddress(new InetSocketTransportAddress(
            "x.x.x.x",9300));
    return transportClient;

AWS Elasticsearch 的输出:

    {
status: 200,
name: "Darkhawk",
cluster_name: "817880037706:zencubes-search",
version: {
number: "1.5.2",
build_hash: "62ff9868b4c8a0c45860bebb259e21980778ab1c",
build_timestamp: "2015-04-27T09:21:06Z",
build_snapshot: false,
lucene_version: "4.10.4"
},
tagline: "You Know, for Search"
}

我尝试 curl (https://search-zencubes-search-xxxxxxxx.eu-west-1.es.amazonaws.com/) 并且它可以工作 - 但不能在端口 9300 上。我在这里做错了什么?

【问题讨论】:

  • 该 AWS 实例上的端口 9300 是否打开?
  • 它没有打开 - 但我想我已经搜索了所有内容,但我没有找到更改它的设置 - 我不知道 aws 是否使用不同的默认端口。啊,我正在使用 aws elasticsearch 服务 - 不是手动配置的 ec2 实例
  • 可能是什么 :) 你有完整的开放获取政策的例子吗(因为这只是一个测试)?

标签: java amazon-web-services elasticsearch amazon-elasticsearch


【解决方案1】:

如何获取 AWS ES URL

转到 Elasticsearch Domain 控制台并在 Overview 选项卡中获取 Endpoint。

要使用的端口是 443。

确保已配置访问控制。


仅供参考

创建 Elasticsearch 索引

curl -v -XPUT "${ES_ENDPOINT}/article/" -H 'Content-Type: application/json' -d '{
    "settings" : {
        "index" : {
            "number_of_shards" : 1,
            "number_of_replicas" : 0
        }
    }
}'

【讨论】:

    【解决方案2】:

    Since the Elasticsearch Java SDK version 5.6 有一个REST Client 可用。这允许您连接到 AWS 上的 Elasticsearch Service。

    目前 Elasticsearch Service 允许安装最高版本 5.5,但您可以针对 5.5 集群使用 5.6 Java SDK,但有一些限制。

    注意:初始化RestClient时,应分别使用端口80443,而不是9200。例如

    RestClient restClient = RestClient.builder(
        new HttpHost("search-test-elasti-xxxx-xxxxx.us-east-1.es.amazonaws.com", 80, "http")).build();
    RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClient); 
    // [...]
    

    【讨论】:

    • 你如何签署请求?
    【解决方案3】:

    正如上面 John Russell 所说,您需要使用 REST 客户端与您的 AWS Elastic 集群进行通信。

    Elastic 最近发布了自己的 Java REST 客户端的第一个 RC 版本,因此现在也是一个选项。

    客户文档: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html

    Maven 回购: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.elasticsearch.client%22%20AND%20a%3A%22rest%22

    【讨论】:

      【解决方案4】:

      本机传输协议不支持使用 AWS Managed ElasticSearch,只能通过 REST 端点使用。考虑切换您的客户端以使用 REST 端点,例如 https://github.com/searchbox-io/Jest

      来源:https://forums.aws.amazon.com/thread.jspa?messageID=681938

      【讨论】:

      • 非常感谢 - 我会在今天晚些时候查看它并回复您:)
      猜你喜欢
      • 2019-12-24
      • 2018-02-08
      • 2019-04-04
      • 2021-02-01
      • 2017-09-06
      • 2021-08-11
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多