尝试ping时出现elasticsearch错误

50pmv0ei  于 6个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(77)

我尝试以下代码:

def connect ():
        es = None
        es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
        print(es.ping())

字符串
我得到以下错误:

/Users/USER/PycharmProjects/practical_week4_ex_1/venv/bin/python /Users/USER/PycharmProjects/practical_week4_ex_1/scratch.py 
Traceback (most recent call last):
  File "/Users/USER/PycharmProjects/practical_week4_ex_1/scratch.py", line 7, in <module>
    es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/USER/PycharmProjects/practical_week4_ex_1/venv/lib/python3.11/site-packages/elasticsearch/_sync/client/__init__.py", line 333, in __init__
    node_configs = client_node_configs(
                   ^^^^^^^^^^^^^^^^^^^^
  File "/Users/USER/PycharmProjects/practical_week4_ex_1/venv/lib/python3.11/site-packages/elasticsearch/_sync/client/utils.py", line 105, in client_node_configs
    node_configs = hosts_to_node_configs(hosts)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/USER/PycharmProjects/practical_week4_ex_1/venv/lib/python3.11/site-packages/elasticsearch/_sync/client/utils.py", line 154, in hosts_to_node_configs
    node_configs.append(host_mapping_to_node_config(host))
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/USER/PycharmProjects/practical_week4_ex_1/venv/lib/python3.11/site-packages/elasticsearch/_sync/client/utils.py", line 221, in host_mapping_to_node_config
    return NodeConfig(**options)  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^
TypeError: NodeConfig.__init__() missing 1 required positional argument: 'scheme'

Process finished with exit code 1


某种形式的响应,没有错误

ldxq2e6h

ldxq2e6h1#

看起来你正在使用相对较新版本的python客户端。是8.x吗?如果是这种情况,你会丢失一个scheme参数,该参数应该是'http'或'https',具体取决于你安装elasticsearch的方式。所以,如果你在本地安装时禁用了ssl和身份验证,它应该是这样的。

es = Elasticsearch([{'scheme': 'http', 'host': 'localhost', 'port': 9200}])

字符串
但是,如果您进行了默认安装。您可能正在使用自生成的SSL密钥和一些自动生成的凭据。因此,您需要禁用SSL身份验证并抑制警告,这在真实的安装中并不推荐,但对于您的本地测试应该是可以的:

es = Elasticsearch([{'scheme': 'https', 'host': 'localhost', 'port': 9200}], 
    basic_auth=('username', 'password'), 
    verify_certs=False, 
    ssl_show_warn=False
)


正确的解决方案应该是将您的客户端指向生成的CA证书:

es = Elasticsearch([{'scheme': 'https', 'host': 'localhost', 'port': 9200}], 
    basic_auth=('username', 'password'), 
    ca_certs='<Path to elastic home>/config/certs/http_ca.crt',
)

相关问题