运行Elasticsearch Python客户端代码时遇ValueError问题求助
解决Elasticsearch Python客户端初始化报错:Either 'hosts' or 'cloud_id' must be specified
问题场景
运行以下Python代码时触发ValueError:
from elasticsearch import Elasticsearch, helpers es = Elasticsearch()
错误信息
ValueError Traceback (most recent call last) Input In [15], in <cell line: 6>() 1 #Import Elascticsearch and helpers from elasticsearch 3 from elasticsearch import Elasticsearch, helpers ----> 6 es = Elasticsearch() File /opt/homebrew/anaconda3/lib/python3.9/site-packages/elasticsearch/_sync/client/__init__.py:191, in Elasticsearch.__init__(self, hosts, cloud_id, api_key, basic_auth, bearer_auth, opaque_id, headers, connections_per_node, http_compress, verify_certs, ca_certs, client_cert, client_key, ssl_assert_hostname, ssl_assert_fingerprint, ssl_version, ssl_context, ssl_show_warn, transport_class, request_timeout, node_class, node_pool_class, randomize_nodes_in_pool, node_selector_class, dead_node_backoff_factor, max_dead_node_backoff, serializer, serializers, default_mimetype, max_retries, retry_on_status, retry_on_timeout, sniff_on_start, sniff_before_requests, sniff_on_node_failure, sniff_timeout, min_delay_between_sniffing, sniffed_node_callback, meta_header, timeout, randomize_hosts, host_info_callback, sniffer_timeout, sniff_on_connection_fail, http_auth, maxsize, _transport) 128 def __init__( 129 self, 130 hosts: t.Optional[_TYPE_HOSTS] = None, (...) 188 _transport: t.Optional[Transport] = None, 189 ) -> None: 190 if hosts is None and cloud_id is None and _transport is None: --> 191 raise ValueError("Either 'hosts' or 'cloud_id' must be specified") 193 if timeout is not DEFAULT: 194 if request_timeout is not DEFAULT: ValueError: Either 'hosts' or 'cloud_id' must be specified
已知Elasticsearch服务器已正常运行,需修复脚本执行问题。
解决方案
1. 连接本地默认端口的Elasticsearch
本地Elasticsearch默认监听9200端口,显式指定host地址即可:
from elasticsearch import Elasticsearch, helpers # 指定本地ES的访问地址 es = Elasticsearch("http://localhost:9200")
2. 带身份验证的本地连接
如果你的Elasticsearch开启了账号密码验证,添加basic_auth参数:
from elasticsearch import Elasticsearch, helpers es = Elasticsearch( "http://localhost:9200", basic_auth=("your_username", "your_password") )
3. 连接Elastic Cloud服务
若使用Elastic Cloud托管服务,使用cloud_id和api_key初始化客户端:
from elasticsearch import Elasticsearch, helpers es = Elasticsearch( cloud_id="your_cloud_identifier", api_key="your_api_key" )
原因说明
Elasticsearch Python客户端8.x及以上版本移除了默认连接地址(原默认localhost:9200),要求必须显式传入hosts(自托管实例地址)或cloud_id(云服务标识符)参数,才能完成客户端初始化。
内容的提问来源于stack exchange,提问作者Shoaib Mohd
相关产品推荐
相关产品推荐

