鱼C论坛

 找回密码
 立即注册
查看: 5013|回复: 24

[已解决]python中elasticsearch连接创建索引问题

[复制链接]
发表于 2023-6-29 08:51:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from elasticsearch import Elasticsearch

es = 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的时候没有设置账号和密码。
最佳答案
2023-6-29 15:36:16
因为你设置了主节点,但是你的配置文件少了一个设置节点名,所以他找不到主节点

配置文件改动:
node.name: node-1 
cluster.initial_master_nodes: ["node-1"]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-29 09:15:58 | 显示全部楼层
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()' 来代替。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 09:27:12 | 显示全部楼层
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'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 09:28:49 | 显示全部楼层
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服务器了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 09:32:08 | 显示全部楼层
isdkz 发表于 2023-6-29 09:28
看来你使用的Elasticsearch客户端版本更新了,'http_auth'参数已经被弃用,取而代之的是'basic_auth'和'b ...

elastic_transport.ConnectionTimeout: Connection timed out

怎么会提示这个连接超时呢?我的ES账号和密码都没有设置的呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 09:37:05 | 显示全部楼层
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  参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 09:41:37 | 显示全部楼层
isdkz 发表于 2023-6-29 09:37
如果你收到一个 "ConnectionTimeout" 错误,这通常意味着你的Python程序无法成功地连接到你的Elasticsear ...

运行 curl http://localhost:9200

返回的是ES服务的信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 09:43:58 | 显示全部楼层
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环境或网络环境。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 09:47:42 | 显示全部楼层
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)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 09:49:04 | 显示全部楼层

这可能意味着你的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) 。这样设置后,客户端会等待更长的时间来获取服务器的响应。

希望这些建议能帮助你解决问题。如果问题仍然存在,你可能需要提供更多的错误信息,以便我们能更好地帮助你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 10:00:25 | 显示全部楼层
isdkz 发表于 2023-6-29 09:49
这可能意味着你的Python程序可以成功连接到Elasticsearch服务,但在尝试创建索引时发生了超时。这可能是 ...

我的系统是WIN10专业版,网络是一直正常的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 10:02:01 | 显示全部楼层
python小小白哟 发表于 2023-6-29 10:00
我的系统是WIN10专业版,网络是一直正常的。

那你确定你要创建的索引是不存在的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 10:03:35 | 显示全部楼层
isdkz 发表于 2023-6-29 10:02
那你确定你要创建的索引是不存在的吗?

输入别的索引名称还是不行的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 10:05:49 | 显示全部楼层
python小小白哟 发表于 2023-6-29 10:03
输入别的索引名称还是不行的。

是不是你运行这个python代码的地方不是es所在的主机?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 10:07:59 | 显示全部楼层
isdkz 发表于 2023-6-29 10:05
是不是你运行这个python代码的地方不是es所在的主机?

我就一台电脑   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 10:10:01 | 显示全部楼层

你的es有没有在虚拟机上跑,然后你是在物理上运行python代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 10:11:35 | 显示全部楼层
isdkz 发表于 2023-6-29 10:10
你的es有没有在虚拟机上跑,然后你是在物理上运行python代码?

没有  ES服务在物理机上装着  pycharn也在物理机
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 10:14:41 | 显示全部楼层
python小小白哟 发表于 2023-6-29 10:11
没有  ES服务在物理机上装着  pycharn也在物理机

那奇怪了,你的 ES是刚安装的是吧,你的ES版本和python的elasticsearch库的版本是多少,我去试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 10:18:07 | 显示全部楼层
ES的版本是 elasticsearch-7.17.3
elasticsearch库的版本用pip list 查看后是 :   elasticsearch     8.8.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 10:46:50 | 显示全部楼层
python小小白哟 发表于 2023-6-29 10:18
ES的版本是 elasticsearch-7.17.3
elasticsearch库的版本用pip list 查看后是 :   elasticsearch     8.8. ...

我这里没有啥问题呀

Snipaste_2023-06-29_10-45-46.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表