在Rails应用程序中使用Amazons ElasticsearchService

时间:2016-11-21 17:29:05

标签: ruby-on-rails amazon-web-services elasticsearch

我正在为我的Rails api设置Elasticsearch。 对于初学者,我在本地设置了Elasticsearch,并且使用elasticsearch gem

进行索引和搜索我的数据库没有任何问题。

接下来,我想使用AWS ElasticsearchService。我在this guide之后的AWS控制台中设置了服务和域。

对于我的生活,我无法弄清楚如何连接它。 我有一个AWS弹性搜索网址,我试图点击它,就像这样:

require 'faraday_middleware/aws_signers_v4'

Elasticsearch::Model.client = Elasticsearch::Client.new url: 'https://search-my-cluster-abc123....es.amazonaws.com' do |f|
  f.request :aws_signers_v4,
            credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY']),
            service_name: 'es',
            region: 'us-east-1'
end

我从弹性的github页面here中采用了这种方法。但是,我似乎无法连接。

[1] pry(main)> Elasticsearch::Model.client.cluster.health
Faraday::ConnectionFailed: execution expired

我还查看了Amazon Elasticsearch SDK,但看起来SDK仅用于设置域,而不是用于执行实际搜索。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

在我提出问题后不久,我终于在searchkik github上找到了答案。

https://github.com/ankane/searchkick/issues/566

请务必使用http://

在弹性搜索网址前加上

答案 1 :(得分:0)

我遇到了同样的问题,但是使用了新的 faraday_middleware-aws-sigv4 宝石。我发现我仍然可以使用https,但是我需要在URL的末尾添加443端口:

require 'elasticsearch'
require 'faraday_middleware/aws_sigv4'

Elasticsearch::Model.client = Elasticsearch::Client.new(url: 'https://search-my_elasticsearch_service.ap-southeast-2.es.amazonaws.com:443']) do |f|
  f.request :aws_sigv4,
    service: 'es',
    region: 'ap-southeast-2',
    access_key_id: ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
end