我正在为我的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仅用于设置域,而不是用于执行实际搜索。
感谢任何帮助,谢谢。
答案 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