如何通过python API连接到Elasticsearch特定集群

3 投票
1 回答
3177 浏览
提问于 2025-04-18 06:40

我有两个 Elasticsearch 集群(不是节点),我想用 Python 的官方 API 来访问它们。

我在每个 Elasticsearch 集群的配置文件中修改了集群的相关设置:

cluster.name: elasticsearch_prod
cluster.name: elasticsearch_traf

但是我找不到连接第二个集群的方法,这两个集群都是在本地运行的。

看起来可以在 Python 中给 Elasticsearch 客户端的构造函数传递参数, http://www.elasticsearch.org/blog/unleash-the-clients-ruby-python-php-perl/

而 elasticsearch-python 的文档解释了如何连接到特定的节点或主机,但没有说明如何连接到特定的集群: http://elasticsearch-py.readthedocs.org/en/master/api.html#elasticsearch

es = Elasticsearch(cluster='elasticsearch_traf')

这导致了

In [86]: es.cluster.stats()
Out[86]: {u'cluster_name': u'elasticsearch_prod', [...]

我希望我的集群在不同的机器上,因此我更倾向于不使用不同的索引。

谢谢

编辑:我也尝试过连接到想要的集群中的节点,但我无法让它工作。我的两个运行中的节点有这些名称(自动生成的 :))

'Jean Grey-Summers' (cluster_name: elasticsearch_prod)
'Sluk' (cluster_name: elasticsearch_traf)

但是当我尝试:

es = Elasticsearch(['Jean Grey-Summers'],sniff_on_start=True)

或者

es = Elasticsearch(['Sluk'], sniff_on_start=True)

结果是:

TransportError: TransportError(N/A, 'Enable to sniff hosts.')

这个 N/A 让我觉得我可能做错了...

正如评论中所说,我并不是在寻找 tribe,我只是想让两个客户端分别连接到一个不同的本地集群。

1 个回答

0

你需要先弄清楚每个集群运行在哪个端口上,然后按照下面的方式连接:

from elasticsearch import Elasticsearch

# Assumes 'elasticsearch-prod' is running 9400 and 'elasticsearch-traf' is running 9200
es_traf = Elasticsearch("localhost:9200")
es_prod = Elasticsearch("http://localhost:9400")

撰写回答