2015-11-07 78 views
2

我在我的scala项目中使用elastic4s与ElasticSearch进行通信。对于开发,我开始了一个本地节点,一切工作正常。对于生产,我想使用Amazon Elasticsearch服务。我配置了该服务并允许通过我的ec2实例的ip访问它。我可以验证它的工作原理是SSH-ING到EC2和做:elastic4s与亚马逊Elasticsearch服务

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]和亚马逊Elasticsearch服务连接不支持TCP [2] :该服务支持端口80上的HTTP,但不支持TCP传输。

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

回答

2

亚马逊的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