【发布时间】:2023-02-02 17:05:28
【问题描述】:
我正在使用 ElasticSearch 8.5.1 版和与 8.5.1 版并发的 ElasticSearch 的最新 python 库。另外,我的 Python 版本是 3.10.4。我试图关注这个tutorial,但显然某些软件在过去一年中发生了一些变化。
我在使用 Haystack 的 ElasticsearchDocumentStore 时遇到了问题。按照 ElasticSearch 说明here 使用 docker 镜像在容器中部署单个节点的实例后,我能够成功运行以下 2 个代码块:
import requests
from datetime import datetime
from elasticsearch import Elasticsearch
from elasticsearch import RequestsHttpConnection
client = Elasticsearch( [{ 'host': '127.0.0.1', 'port': 9200,'scheme': 'https'}],
ca_certs="../http_ca.crt", http_auth=('username', 'password'))
resp = client.info()
resp # this executed correctly
这只是为了很好的衡量标准:
r = requests.get('https://localhost:9200/_cluster/health', verify="../http_ca.crt",
headers={"Authorization": 'Basic ' + TOKEN})
r.json() # this executed correctly
然后我试了
from haystack.document_stores.elasticsearch import ElasticsearchDocumentStore
doc_store = ElasticsearchDocumentStore(
host="localhost",
port=9200,
scheme="https",
username = "username",
password = "password",
index = "doc1",
)
无论我在上面尝试什么,我都会收到此错误:
输出超出大小 限制。 在文本中打开完整的输出数据 编辑 警告:弹性搜索:获取 https://localhost:9200/ [状态:N/A request:0.029s] Traceback(最近一次调用):文件 "c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\urllib3\connectionpool.py", 第 703 行,在 urlopen 中 httplib_response = self._make_request( 文件 "c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\urllib3\connectionpool.py", 第 386 行,在 _make_request self._validate_conn(conn) 文件“c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\urllib3\connectionpool.py”, 第 1042 行,在验证连接 conn.connect() 文件“c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\urllib3\connection.py”, 第 414 行,连接中 self.sock = ssl_wrap_socket( 文件 "c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\urllib3\util\ssl.py", 第 449 行,在 ssl_wrap_socket 中 ssl_sock =ssl_wrap_socket_impl(文件“c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\urllib3\util\ssl.py", 第 493 行,在 _ssl_wrap_socket_impl 返回 ssl_context.wrap_socket(sock, server_hostname=server_hostname) 文件“C:\Python310\lib\ssl.py”, 第 512 行,在 wrap_socket 中 返回 self.sslsocket_class._create( 文件“C:\Python310\lib\ssl.py”,第 1070 行,在 _create self.do_handshake() 文件“C:\Python310\lib\ssl.py”,第 1341 行,在 do_handshake 中 self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:自签名 证书链中的证书 (_ssl.c:997)
在处理上述异常的过程中,又出现了一个异常:
回溯(最后一次通话): ... self.do_handshake() 文件“C:\Python310\lib\ssl.py”,第 1341 行,在 do_handshake 中 self._sslobj.do_handshake() urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:997) 输出超出大小限制。在文本编辑器中打开完整的输出数据
ConnectionError Traceback(最后一次调用) 文件 c:\Users\k.mufti\Desktop\QA_system.venv\lib\site-packages\haystack\document_stores\elasticsearch.py:272,在 ElasticsearchDocumentStore._init_elastic_client(cls, host, port, username, password, api_key_id, api_key , aws4auth, scheme, ca_certs, verify_certs, timeout, use_system_proxy) 271 如果不是状态: --> 272 引发连接错误( 273 f“与 Elasticsearch 的初始连接失败。确保运行 Elasticsearch 实例” 274 f"at
{hosts}并且它已经完成初始加速(可能需要 > 30 秒)。" 275) 276 除了异常:ConnectionError:与 Elasticsearch 的初始连接失败。确保您在
[{'host': 'localhost', 'port': 9200}]运行 Elasticsearch 实例,并且它已完成初始启动(可能需要 > 30 秒)。在处理上述异常的过程中,又出现了一个异常:
ConnectionError Traceback(最后一次调用) 单元格输入 [97],第 1 行 ----> 1 doc_store = ElasticsearchDocumentStore( 2 主机=“本地主机”, 3端口=9200, 4 方案=“https”, 5 用户名 = "用户名", 6 password = "密码", 7 索引 = "aurelius", 8个 9) ... 278 f“与 Elasticsearch 的初始连接失败。确保您在
{hosts}运行 Elasticsearch 实例并且它已完成初始启动(可能需要 > 30 秒)。” 279) 280回头客户ConnectionError:与 Elasticsearch 的初始连接失败。确保您在
[{'host': 'localhost', 'port': 9200}]运行 Elasticsearch 实例,并且它已完成初始启动(可能需要 > 30 秒)。任何想法或解决方案?我试过使用和不使用函数可以采用的参数,但没有任何效果。
【问题讨论】:
标签: python docker elasticsearch ssl haystack