在 aws 中的弹性搜索中编制索引时出现连接错误

Connection error while indexing in Elastic search in aws

我想在我的使用中使用 aws 的弹性搜索。以下代码在我的本地弹性搜索中完全正常,但在尝试连接到 aws elasticsearch 服务时总是出错。我正在使用 python 2.7、django 1.10 和弹性搜索 5.1.1。 以下是错误

ConnectionError(HTTPSConnectionPool(host='https', port=443): 最大重试次数超过 url: //search-test-abc-jlpfzhi64qcrhhqxycov5rzgcq.ap-south-1.es.amazonaws.com/:443/ test-index/tweet/1(由 NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)))引起:ConnectionError(HTTPSConnectionPool (host='https', port=443): 最大重试次数超过 url: //search-test-abc-jlpfzhi64qcrhhqxycov5rzgcq.ap-south-1.es.amazonaws.com/:443/test-index/tweet/1(由 NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',)))

此外,这是我正在使用的代码

host = AWS_ELASTIC_SEARCH_URL
awsauth = AWS4Auth(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ELASTIC_SEARCH_REGION, 'es')

es = Elasticsearch(
    hosts=[{'host': host, 'port': 443}],
    http_auth=awsauth,
    use_ssl=True,
    verify_certs=True,
    connection_class=elasticsearch.RequestsHttpConnection
)

doc = {
'author': 'kimchy',
'text': 'Elasticsearch: cool. bonsai cool.',
'timestamp': datetime.now(),
}
res = es.index(index="test-index", doc_type='tweet', id=1, body=doc)

最后一行出错。我还完全访问了弹性搜索 url.

我终于明白了。在我的例子中,我将主机 url 写为“https://example.com/”,但它应该仅作为 "example.com" 给出。花了很多时间才想到这一点。以下是我使用 python 2.7 和 django 1.9.

连接到 aws ElasticSearch (5.1) 的工作代码
def bulk_indexing():

     host = 'example.com'  #not https://example.com"
     awsauth = AWS4Auth('access key', 'secret', region, 'es')
     es = Elasticsearch(
         hosts=[{'host': host, 'port': 443}],
         http_auth=awsauth,
         use_ssl=True,
         verify_certs=True,
         connection_class=RequestsHttpConnection
     )
     payload = {'abc' : 'def'}
     es.index('abc-index', 'doc', payload)