3

我有 2 个弹性搜索集群(不是节点),我想使用 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', [...]

我希望我的集群在不同的机器上,因此我不喜欢使用不同的索引。

谢谢

编辑:我也尝试从希望的集群连接到节点,但我无法使其工作。我的两个正在运行的节点具有这些名称(auto :))

'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让我觉得我做得不对......

正如评论中所说,我认为我不是在寻找部落,我只想让两个客户端将每个客户端连接到一个在本地运行的不同集群

4

1 回答 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")
于 2020-06-17T18:59:09.310 回答