使用 python 的 Elasticsearch 包连接到远程 Elasticsearch 服务器

时间:2021-01-20 17:51:01

标签: python elasticsearch curl

我想为我的网站使用远程 Elasticsearch 服务器。

我使用 model = Sequential() model.add(Conv2D(8, (7,7), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(16, (7,7), activation='relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(64, activation='relu')) model.add(Dropout(0.25)) model.add(Dense(num_classes, activation='softmax')) model.summary() batch_size = 1000 epochs = 100 model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(learning_rate=0.001), metrics=['accuracy']) history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=2, validation_data=(x_val, y_val)) 云服务创建了远程 Elasticsearch 服务器。 我可以使用以下命令连接/ping 远程 Elasticsearch 服务器(它已清除敏感信息): elastic.co/

将此命令绑定到终端后,我收到以下响应:

curl -u username:password https://55555555555bb0c30d1cba4e9e6.us-central1.gcp.cloud.es.io:9243 

我正在使用以下 Elasticsearch python 客户端将 Elasticsearch 与我的网站集成:https://elasticsearch-py.readthedocs.io/en/v7.10.1/index.html#

为了初始化本地连接,我导入了 Elasticsearch 类并通过粘贴我的 Elasticsearch 服务器的本地 url 来初始化该类的一个实例。

{
  "name" : "instance-0000000001",
  "cluster_name" : "555555555555",
  "cluster_uuid" : "55555555555",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "555555555555555555555555",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

现在我想使用相同的 Elasticsearch 类连接到我的远程服务器。为此,我需要使用连接到远程 Elasticsearch 服务器的信息格式化 Elasticsearch 对象的初始化。

这就是我遇到麻烦的地方。 Elasticsearch 类的文档字符串非常不透明。简而言之,它要求我创建一个自定义连接对象,但我一直无法弄清楚如何去做。

Elasticsearch 对象的文档[稍微好一点][1],但仍然没有给出涉及用户名和密码的示例。

我可以创建 API 密钥,但我不确定如何使用它。涉及 API 密钥或回答如何使用我的用户名和密码进行连接的答案将非常有帮助。

1 个答案:

答案 0 :(得分:1)

您需要按照文档中的说明使用 TLS/SSL and Authentication 进行连接。

在你的情况下,你应该使用这样的东西。

from elasticsearch import Elasticsearch

es = Elasticsearch(
    ['5555555555bb0c30d1cba4e9e6.us-central1.gcp.cloud.es.io'],
    http_auth=('username', 'password'),
    scheme="https",
    port=9243,
)
相关问题