2

我在我的 scala 项目中使用 elastic4s 与 ElasticSearch 进行通信。为了开发,我启动了一个本地节点,一切正常。对于生产,我想使用 Amazon Elasticsearch Service。我已经配置了该服务并允许通过我的 ec2 实例的 ip 访问它。我可以通过 ssh 进入 ec2 并执行以下操作来验证它是否有效:

curl search-blabla-blabla.us-east-1.es.amazonaws.com/_cluster/health

但是,我无法将 elastic4s 连接到该 ES 实例。我正在努力:

ElasticClient.remote("search-blabla-blabla.us-east-1.es.amazonaws.com", 9300)

这导致:

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []

阅读文档,elastic4s 似乎只能通过 TCP [ 1 ] 连接,而 Amazon Elasticsearch Service 不支持 TCP[ 2 ]:该服务支持端口 80 上的 HTTP,但不支持 TCP 传输。

有人可以确认 elastic4s 和 Amazon ES 真的不能一起工作吗?因为那意味着我必须重新编写我所有的 ES 代码。

4

1 回答 1

2

Amazon 的 Elasticsearch 服务不支持 TCP,只支持 HTTP 协议。Elastic4s 仅使用 TCP,Elasticsearch Java API 也是如此(Elastic4s 是 Java 客户端的包装器)。

如果您想使用 HTTP,您需要手动编写查询并使用常规 HTTP 客户端,或者使用支持 HTTP 协议的 Elasticsearch 客户端。

更新:

从 5.2 版本开始,elastic4s 支持 HTTP 和 TCP。这目前是实验性的。https://github.com/sksamuel/elastic4s#quick-start

于 2015-11-12T10:34:50.937 回答