全部產品
Search
文件中心

Elasticsearch:通過應用程式串連叢集

更新時間:Mar 25, 2026

本文介紹如何使用Java、Python、Go語言串連Elasticsearch叢集(ES)。

準備工作

擷取叢集串連地址

您可以通過VPC私網或公網地址串連到ES叢集。

  • VPC私網串連地址:通過VPC私網地址訪問ES叢集,延遲低,穩定性高。該地址在叢集建立成功後預設開啟。

  • 公網串連地址:通過公網訪問ES叢集,需手動開啟。

如何開啟公網訪問:

  1. 登入ES控制台,進入執行個體基本資料頁面。

  2. 單擊左側導覽列 配置與管理>安全配置,開啟公網訪問。待叢集狀態由生效中變更為生效時,表示公網訪問已成功開啟。

    image

    重要

    公網地址會降低ES叢集的安全性,如果使用公網地址,請務必配置IP白名單,並在使用完畢後及時關閉公網訪問。

設定IP白名單

為保障叢集安全,您需要將待訪問裝置的IP地址加入ES叢集的VPC私網或者公網白名單,該IP地址所屬的裝置才能訪問ES叢集。

  1. 擷取待訪問裝置IP。

    您可以參照以下情境,擷取待訪問裝置的IP地址。

    情境

    需擷取的IP地址

    擷取方式

    在本地裝置中串連ES叢集

    本地裝置公網IP。

    如果本地裝置位於區域網路(如家庭或公司網路)內,需將該區域網路的公網出口IP地址添加到ES叢集的公網白名單中。

    通過curl ipinfo.io/ip查詢本地裝置公網IP。

    在不同VPC的ECS執行個體中串連ES叢集

    ECS執行個體的公網IP

    登入ECS控制台,在執行個體列表查看。

    在相同VPC的ECS執行個體中串連ES叢集

    ECS執行個體的私網IP

    登入ECS控制台,在執行個體列表查看。

  2. 將擷取到的IP地址添加到白名單分組中。

    1. 登入ES控制台,進入執行個體基本資料,單擊左側導覽列 配置與管理>安全配置,單擊修改在彈窗中設定VPC私網或者公網訪問白名單。

      image

    2. 單擊default分組右側的配置 ,在彈出的對話方塊中添加VPC私網或者公網白名單。單個叢集最多可配置300個IP或者IP網段,多個IP或者IP網段之間用英文逗號隔開,且逗號前後不能有空格。

      • 也可單擊新增IP白名單分組,自訂分組名稱。

      • 白名單分組僅用於IP地址管理,不影響存取權限。所有分組內的IP地址許可權相同。

      image

      配置類別

      格式和樣本值

      重要注意事項

      IPv4地址格式

      • 單個IP:192.168.0.1

      • 網段:192.168.0.0/24

      • 禁止訪問:127.0.0.1

      • 允許所有訪問:0.0.0.0/0

        重要

        存在高危風險,強烈建議不要配置 0.0.0.0/0

        部分叢集版本(如7.16/8.5)和地區不支援 0.0.0.0/0,請以控制台介面或者報錯提示為準。

      IPv6地址格式

      (僅v2部署架構且所屬地區為杭州的叢集支援)

      • 單個IP:2401:XXXX:1000:24::5

      • 網段:2401:XXXX:1000::/48

      • 禁止所有訪問:::1

      • 允許所有訪問::/0

        重要

        存在高危風險,強烈建議不要配置 ::/0

        部分叢集版本不支援 ::/0,請以控制台介面或者配置提示資訊為準。

    3. 配置完成後,單擊確認

      image

注意事項

為確保相容性,建議用戶端使用的 Java、Python 或 Go 語言版本與ES叢集底層運行時的版本保持一致。

串連叢集

Java

  1. 安裝Java JDK,JDK版本為1.8及以上。

  2. 配置pom依賴。

    重要

    請將version設定為正確的ES版本號碼,只有當version設定正確時才能拉取相關依賴,本樣本ES版本為8.17.0。

    <dependency>
        <groupId>co.elastic.clients</groupId>
        <artifactId>elasticsearch-java</artifactId>
        <version>8.17.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
  3. 串連ES叢集並建立名為hr_test的索引。

    配置YML參數,開啟自動建立索引:action.auto_create_index: true

    package org.example;
    import co.elastic.clients.elasticsearch.ElasticsearchClient;
    import co.elastic.clients.elasticsearch.cat.IndicesResponse;
    import co.elastic.clients.elasticsearch.indices.*;
    import co.elastic.clients.json.jackson.JacksonJsonpMapper;
    import co.elastic.clients.transport.ElasticsearchTransport;
    import co.elastic.clients.transport.rest_client.RestClientTransport;
    import org.apache.http.HttpHost;
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
    import org.elasticsearch.client.*;
    import java.io.IOException;
    public class RestClientTest {
        public static void main(String[] args) {
            // Elasticsearch叢集需要basic auth驗證。
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            //訪問使用者名稱和密碼為您建立Elasticsearch執行個體時設定的使用者名稱和密碼,也是Kibana控制台的登入使用者名稱和密碼。
            credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{UserName}", "{YourPassword}"));
            // 通過builder建立rest client,配置http client的HttpClientConfigCallback。
            // 單擊所建立的Elasticsearch執行個體ID,在基本資料頁面擷取公網地址,即為ES叢集地址。
            RestClient restClient = RestClient.builder(new HttpHost("{YourEsHost}", 9200, "https"))
                    .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                        @Override
                        public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                            return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                        }
                    }).build();
    
            // 使用 Jackson 映射器建立傳輸
            ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
            // 建立 API 用戶端
            ElasticsearchClient elasticsearchClient = new ElasticsearchClient(transport);
            // 建立了一個名為 "foo" 的別名,並將其設定為寫入別名 (write index),這意味著所有寫入操作(例如索引、更新、刪除文檔)將自動路由到這個別名所對應的索引上。
            try {
                //建立索引
                CreateIndexResponse indexRequest = elasticsearchClient.indices().create(createIndexBuilder -> createIndexBuilder
                        .index("hr_test")
                        .aliases("foo", aliasBuilder -> aliasBuilder
                                .isWriteIndex(true)
                        )
                );
                //檢查“indexRequest”請求的操作是否已被Elasticsearch叢集確認
                boolean acknowledged = indexRequest.acknowledged();
                System.out.println("Index document successfully! " + acknowledged);
    
                //查看所有索引資訊(health status index uuid pri rep)
                IndicesResponse indicesResponse = elasticsearchClient.cat().indices();
                indicesResponse.valueBody().forEach(info -> System.out.println(info.health() + "\t"+  info.status() + "\t" + info.index() + "\t" + info.uuid() +"\t" + info.pri() + "\t" + info.rep()));
    
    
                transport.close();
                restClient.close();
            } catch (IOException ioException) {
                // 異常處理。
            }
        }
    }
    

    成功執行後返回以下資訊:

    image

Python

以下代碼以ES 8.17.0版本為例,請根據實際ES版本替換版本號碼。

# 安裝指定版本的依賴
pip install elasticsearch==8.17.0
from elasticsearch import Elasticsearch

# 串連叢集
es = Elasticsearch(
    hosts=['http://<YourEsHost>:9200'],
    basic_auth=('<UserName>', '<YourPassword>'),
)
# 擷取並列印叢集資訊
res = es.info() 
print(res)

Go

以下以ES 8.x版本為例介紹如何通過Go串連ES,更多Go API Client的使用特性,請參見Elasticsearch Go Client

go get github.com/elastic/go-elasticsearch/v8
package main

import (
	"github.com/elastic/go-elasticsearch/v8"
	"log"
)

func main() {
	cfg := elasticsearch.Config{
		Addresses: []string{
			"http://<YourEsHost>:9200",
		},
		Username: "<UserName>",
		Password: "<YourPassword>",
	}

	es, err := elasticsearch.NewClient(cfg)
	if err != nil {
		log.Fatalf("Error creating the client: %s", err)
	}

	res, err := es.Info()
	if err != nil {
		log.Fatalf("Error getting response: %s", err)
	}

	defer res.Body.Close()
	log.Println(res)
}

參數說明

參數

說明

UserName

預設訪問使用者名稱為elastic,該使用者具有叢集最高許可權(可理解為管理員賬戶)。

出於安全考慮,不建議在生產環境中直接使用此預設管理員賬戶,您可以通過Elasticsearch X-Pack的RBAC(Role-based Access Control)機制,自訂角色並分配許可權,然後將角色指派給使用者,實現許可權精細化管控,具體操作請參見通過Elasticsearch X-Pack角色管理實現使用者權限管控

YourPassword

UserName對應的密碼。

https

訪問協議,http協議預設開啟。

為了保障叢集安全性,建議使用https協議,需手動開啟。登入ES控制台進入執行個體基本資料,單擊左側導覽列 配置與管理>安全配置,開啟https協議。

重要

啟用HTTPS協議前,請務必更新應用程式代碼以支援HTTPS串連方式。否則,現有使用HTTP協議的代碼將無法建立安全連線,導致串連失敗。

YourEsHost

準備工作中已擷取的叢集串連地址:

  • VPC私網串連地址

  • 公網串連地址

9200

叢集的訪問連接埠,VPC私網和公網預設連接埠號碼均為9200。