连接到Elasticsearch Heroku数据库

时间:2014-05-22 00:03:32

标签: heroku elasticsearch

我已经在Heroku上设置了一个启动帐户,其中有一个Bonsai elasticsearch附加组件。我正在尝试通过Java应用程序连接到它,但似乎无法通过传输客户端或弹性搜索文档页面上解释的NodeBuilder选项进行连接。

我可以运行以下CURL来发布数据:

curl -XPOST http://banyan-7086980.us-east-1.bonsai.io/med/test/hello3 -d '{"title":"Hello world2"}'

我目前的想法是:

    Client client = new TransportClient()
            .addTransportAddress(new InetSocketTransportAddress("http://banyan-7086980.us-east-1.bonsai.io", 9300));

但这不起作用。我错过了什么?

2 个答案:

答案 0 :(得分:0)

在Heroku上提供托管Elasticsearch的大多数服务不支持除HTTP之外的任何其他传输。从Java与Elasticsearch连接的规范方法是使用传输客户端或节点客户端,这两者都是您尝试连接到HTTP端点的。

传输和节点客户端使用与HTTP不兼容的自定义二进制协议。

此外,默认情况下,此二进制协议不支持生产设置中应具备的一些核心功能:身份验证和加密。

如果您的要求包括在Heroku上运行并使用官方Java客户端,请查看Found Elasticsearch on Heroku,它使用自定义传输模块为传输客户端提供支持:https://github.com/foundit/elasticsearch-transport-module

披露:我是Found

的开发人员之一

答案 1 :(得分:-1)

Bonsai是elasticsearch的托管服务,如果你使用的是heroku插件,那么ES和Heroku的内部都是抽象的。

例如,您正在访问的URL位于端口80(http),而您尝试连接到9300(这是默认的Elasticsearch端口)。这告诉我,出于安全原因,中间存在一个隐藏端口9200和9300的代理层。

怎么做?

您可以尝试将Java客户端连接到端口80。

Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress("http://banyan-7086980.us-east-1.bonsai.io", 80)); 

如果您使用Heroku来托管您的应用程序,请按照Bonsai插件的instructions,使用ENV变量来设置连接。

如果您只想拥有托管实例,则可以使用qbox之类的替代方案found

我更喜欢使用Elasticsearch on Openshift