2015-11-07 85 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