我想使用 aws 的弹性搜索来供我使用。以下代码在我的本地弹性搜索中工作完全正常,但在尝试连接到 aws elasticsearch 服务时总是给出错误。我正在使用 python 2.7、django 1.10 和弹性搜索 5.1.1。 以下是错误
ConnectionError(HTTPSConnectionPool(主机='https',端口=443):超过最大重试次数,网址://search-test-abc-jlpfzhi64qcrhhqxycov5rzgcq.ap-south-1.es.amazonaws.com/:443/test-index/ tweet/1 (由 NewConnectionError('另外,这是我正在使用的代码
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)
最后一行出现错误。我还完全访问了弹性搜索网址。
我终于明白了。就我而言,我将主机网址写为“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)
ConnectionError(HTTPSConnectionPool(host ='qa43g2l2a1mw4vt481a3.aoss.amazonaws.com',port = 443):超过最大重试次数,网址:/oscars-index/_search(由NewConnectionError('
我遇到了同样的错误,但在 opensearch 无服务器中,即使我以“example.com”格式给出了主机。有什么解决办法吗?
当我在 .ipynb 文件中使用 Opensearch Serverless 服务时,它工作得绝对正常,但如果我在 .py 文件上运行它,则会出现上述错误。
host = "host.aoss.amazonaws.com"
region = "us-east-1"
service = "aoss"
credentials = boto3.Session().get_credentials()
auth = AWSV4SignerAuth(credentials, region, service)
os_client = OpenSearch(
hosts = [{"host": host, "port": 443}],
http_auth = auth,
use_ssl = True,
verify_certs = True,
connection_class = RequestsHttpConnection,
pool_maxsize = 20
)