我正在尝试从python脚本查询elasticsearch,并引发了异常。
我遵循了this one等官方指南。 但是,当我尝试查询elasticsearch时,没有成功。例外:
File "C:\...\connection\http_urllib3.py", line 250, in perform_request
raise ConnectionError("N/A", str(e), e)
elasticsearch.exceptions.ConnectionError:
ConnectionError(check_hostname requires server_hostname) caused by: ValueError(check_hostname requires server_hostname)
这是我的代码:
from elasticsearch import Elasticsearch
from elasticsearch import RequestsHttpConnection
from ssl import create_default_context
import ssl
context = create_default_context(cafile="certificate.pem")
es = Elasticsearch("https://localhost", ssl_context=context, http_auth=('username','password'))
res = es.search(index="dr_*", body = {
'size' : 10,
'query': {
'match_all' : {}
}
})
为什么会发生?
答案 0 :(得分:1)
不幸的是,我也遇到了这样的问题。
默认情况下,上下文中check_hostname的值为True,因此必须指定server_hostname。这是一个简单的解决方案,只需在创建上下文后添加以下行
context.check_hostname = False
它应该可以正常工作
答案 1 :(得分:0)
在示例中您没有提及端口。请验证您提到的教程和以下代码段:
es = Elasticsearch(
['localhost', 'otherhost'],
http_auth=('user', 'secret'),
scheme="https",
port=443,
)
答案 2 :(得分:0)
执行 context.check_hostname = False
会使连接变得不安全。
改用这个构造函数:
Elasticsearch(
hosts=['ip_address'],,
http_auth=('elastic', 'pass'),
use_ssl=True,
verify_certs=True,
port=9200, #make sure of the port elasticsearch is using
ca_certs='/Users/raphaeldelio/ca.crt'
)