python中elasticsearch连接创建索引问题
from elasticsearch import Elasticsearches = Elasticsearch("http://127.0.0.1:9200/")
result = es.indices.create(index='news',ignore=400)
print(result)
然后就报错了:
DeprecationWarning: Passing transport options in the API method is deprecated. Use 'Elasticsearch.options()' instead.
result = es.indices.create(index='news',ignore=400)
如果需要设置账号和密码的话,该怎么填写Elasticsearch("http://127.0.0.1:9200/")括号里面的内容呢?我安装elasticsearch的时候没有设置账号和密码。 Elasticsearch中设置账号和密码的操作,如果使用了默认设置,那么账号和密码默认是 "elastic" 和 "password"。
在Python的Elasticsearch客户端中,如果你想要使用HTTP basic authentication,那么你可以这样设置账号和密码:
from elasticsearch import Elasticsearch
es = Elasticsearch(["http://127.0.0.1:9200/"], http_auth=('elastic', 'password'))
这里'http_auth'是一个包含用户名和密码的元组。
然后对于你的警告信息 "DeprecationWarning: Passing transport options in the API method is deprecated. Use 'Elasticsearch.options()' instead.",这是因为 'ignore' 参数在新版本中被弃用了,你应该使用 'Elasticsearch.options()' 来代替。
isdkz 发表于 2023-6-29 09:15
Elasticsearch中设置账号和密码的操作,如果使用了默认设置,那么账号和密码默认是 "elastic" 和 "password ...
提示这个错误:
DeprecationWarning: The 'http_auth' parameter is deprecated. Use 'basic_auth' or 'bearer_auth' parameters instead
es = Elasticsearch(["http://127.0.0.1:9200/"], http_auth=('elastic', 'password')) python小小白哟 发表于 2023-6-29 09:27
提示这个错误:
DeprecationWarning: The 'http_auth' parameter is deprecated. Use 'basic_auth' or ' ...
看来你使用的Elasticsearch客户端版本更新了,'http_auth'参数已经被弃用,取而代之的是'basic_auth'和'bearer_auth'。如果你是使用基本身份验证(HTTP basic authentication),可以使用'basic_auth'参数,如果是使用令牌验证(token-based authentication),就可以使用'bearer_auth'参数。
下面是使用基本身份验证的示例代码:
from elasticsearch import Elasticsearch
es = Elasticsearch(["http://127.0.0.1:9200/"], basic_auth=('elastic', 'password'))
这样就可以使用账号和密码连接到Elasticsearch服务器了。 isdkz 发表于 2023-6-29 09:28
看来你使用的Elasticsearch客户端版本更新了,'http_auth'参数已经被弃用,取而代之的是'basic_auth'和'b ...
elastic_transport.ConnectionTimeout: Connection timed out
怎么会提示这个连接超时呢?我的ES账号和密码都没有设置的呀。 python小小白哟 发表于 2023-6-29 09:32
elastic_transport.ConnectionTimeout: Connection timed out
怎么会提示这个连接超时呢?我的ES账号 ...
如果你收到一个 "ConnectionTimeout" 错误,这通常意味着你的Python程序无法成功地连接到你的Elasticsearch服务。这可能是由于几个原因引起的:
1. 你的Elasticsearch服务没有运行。你可以在命令行上使用curl http://localhost:9200命令来检查Elasticsearch服务是否运行。如果服务在运行,这个命令应该返回一些关于你的Elasticsearch服务的信息。如果服务没有运行,你可能需要启动它。
2. 你的Elasticsearch服务可能不在你预期的端口上运行。默认情况下,Elasticsearch会在9200端口运行。但是,如果你改变了这个设置,你需要在连接到Elasticsearch时使用正确的端口。
3. 你的网络可能有问题。检查你的网络连接是否正常。
4. 防火墙可能阻止了你的程序连接到Elasticsearch。你可以尝试关闭防火墙,或者配置防火墙允许你的程序连接到Elasticsearch。
如果你在运行Elasticsearch时没有设置账号和密码,你应该在创建Elasticsearch客户端时不提供basic_auth参数。像这样:
from elasticsearch import Elasticsearch
es = Elasticsearch(["http://127.0.0.1:9200/"])
只有当Elasticsearch设置了需要HTTP基础认证时,你才需要提供basic_auth参数。 isdkz 发表于 2023-6-29 09:37
如果你收到一个 "ConnectionTimeout" 错误,这通常意味着你的Python程序无法成功地连接到你的Elasticsear ...
运行 curl http://localhost:9200
返回的是ES服务的信息。 python小小白哟 发表于 2023-6-29 09:41
运行 curl http://localhost:9200
返回的是ES服务的信息。
如果你的curl http://localhost:9200命令返回了Elasticsearch的服务信息,这说明你的Elasticsearch服务确实正在运行,且可以在默认的9200端口上被访问。
这就意味着你的Python Elasticsearch客户端应该也能够连接到这个服务。如果你的Python代码仍然无法连接到Elasticsearch,那可能是由于其他问题引起的。例如,防火墙设置,网络问题,或者Python环境的问题。
这是连接Elasticsearch的基础代码:
from elasticsearch import Elasticsearch
es = Elasticsearch(['http://localhost:9200'])
如果你确定Elasticsearch服务在运行,并且没有任何身份验证,那么这段代码应该能够工作。如果它还是不能工作,你可能需要更详细地检查你的Python环境或网络环境。 isdkz 发表于 2023-6-29 09:43
如果你的curl http://localhost:9200命令返回了Elasticsearch的服务信息,这说明你的Elasticsearch服 ...
这两行代码:
from elasticsearch import Elasticsearch
es = Elasticsearch(['http://localhost:9200'])
倒没有报错,但是加了以下两行代码就显示超时:
result = es.indices.create(index='news')
print(result)
python小小白哟 发表于 2023-6-29 09:47
这两行代码:
这可能意味着你的Python程序可以成功连接到Elasticsearch服务,但在尝试创建索引时发生了超时。这可能是由于以下原因:
1. Elasticsearch的性能问题:如果Elasticsearch在处理大量请求或者运行大型操作,它可能会变得很慢,甚至超时。在这种情况下,你可能需要查看Elasticsearch的监控数据,看看是否有任何明显的性能问题。
2. 网络延迟或不稳定:虽然你的Python程序可以连接到Elasticsearch,但如果网络延迟高或者连接不稳定,可能会导致超时。你可以尝试从不同的网络环境或不同的机器上运行你的Python程序,看看问题是否依然存在。
3. 创建的索引已经存在:如果你尝试创建的索引已经存在,那么 es.indices.create(index='news') 可能会超时。你可以使用 es.indices.exists(index='news') 来检查索引是否已经存在。如果已经存在,你需要先删除它,然后再尝试创建。
4. 调整客户端的超时设置:Elasticsearch Python客户端默认的超时时间可能比较短,如果服务器响应慢,可能就会引发超时错误。你可以在初始化Elasticsearch对象时,设置更大的超时时间,例如 es = Elasticsearch(['http://localhost:9200'], timeout=30) 。这样设置后,客户端会等待更长的时间来获取服务器的响应。
希望这些建议能帮助你解决问题。如果问题仍然存在,你可能需要提供更多的错误信息,以便我们能更好地帮助你。 isdkz 发表于 2023-6-29 09:49
这可能意味着你的Python程序可以成功连接到Elasticsearch服务,但在尝试创建索引时发生了超时。这可能是 ...
我的系统是WIN10专业版,网络是一直正常的。 python小小白哟 发表于 2023-6-29 10:00
我的系统是WIN10专业版,网络是一直正常的。
那你确定你要创建的索引是不存在的吗? isdkz 发表于 2023-6-29 10:02
那你确定你要创建的索引是不存在的吗?
输入别的索引名称还是不行的。 python小小白哟 发表于 2023-6-29 10:03
输入别的索引名称还是不行的。
是不是你运行这个python代码的地方不是es所在的主机? isdkz 发表于 2023-6-29 10:05
是不是你运行这个python代码的地方不是es所在的主机?
我就一台电脑 python小小白哟 发表于 2023-6-29 10:07
我就一台电脑
你的es有没有在虚拟机上跑,然后你是在物理上运行python代码? isdkz 发表于 2023-6-29 10:10
你的es有没有在虚拟机上跑,然后你是在物理上运行python代码?
没有ES服务在物理机上装着pycharn也在物理机 python小小白哟 发表于 2023-6-29 10:11
没有ES服务在物理机上装着pycharn也在物理机
那奇怪了,你的 ES是刚安装的是吧,你的ES版本和python的elasticsearch库的版本是多少,我去试一下 ES的版本是 elasticsearch-7.17.3
elasticsearch库的版本用pip list 查看后是 : elasticsearch 8.8.0 python小小白哟 发表于 2023-6-29 10:18
ES的版本是 elasticsearch-7.17.3
elasticsearch库的版本用pip list 查看后是 : elasticsearch 8.8. ...
我这里没有啥问题呀
页:
[1]
2