すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:Alibaba Cloud Elasticsearch クラスターへの接続

最終更新日:Jun 12, 2026

このトピックでは、PHP、Python、Java、Go のクライアントを使用してAlibaba Cloud Elasticsearch クラスターに接続するためのサンプルコードと重要な注意事項について説明します。

前提条件

  • Alibaba Cloud Elasticsearch クラスターを作成します。 詳細については、「Alibaba Cloud Elasticsearch クラスターの作成」をご参照ください。

  • 目的のプログラミング言語用の Elasticsearch クライアントをインストールします。

    互換性の問題を避けるために、お使いの Elasticsearch のバージョンと一致するクライアントバージョンを使用してください。 Elasticsearch とクライアントのバージョン互換性の詳細については、「互換性」をご参照ください。

    • Elasticsearch Go クライアント: Elasticsearch Go Client

      説明

      Go を使用して Alibaba Cloud Elasticsearch クラスターに接続する前に、Go コンパイル環境をインストールしてください。 詳細については、「The Go Programming Language」をご参照ください。 このトピックの例では、Go 1.19.1 を使用します。

    • Elasticsearch Java クライアント: Elasticsearch Java API Client

      説明
      • Java クライアントには、トランスポートクライアント、低レベル REST クライアント、高レベル REST クライアント、Java API クライアントがあります。 各タイプのサンプルコードについては、「Java API」をご参照ください。 このトピックでは、高レベル REST クライアント V6.7 を例として使用します。

      • Java トランスポートクライアントは、TCP を介して Elasticsearch クラスターと通信します。 クライアントを使用して異なるバージョンの Elasticsearch クラスターと通信すると、互換性の問題が発生する可能性があります。 このため、トランスポートクライアントは以降のバージョンでは非推奨となっています。 トランスポートクライアント V5.5 または V5.6 を使用して V5.5 または V5.6 の Elasticsearch クラスターに接続すると、NoNodeAvailableException エラーが発生する可能性があります。 バージョンの互換性を確保するために、トランスポートクライアント V5.3.3 または「Java 低レベル REST クライアント」を使用して Elasticsearch クラスターに接続してください。

    • Elasticsearch PHP クライアント: Elasticsearch PHP Client

      説明

      Elasticsearch PHP クライアントが提供するデフォルトの接続プールは、クラウド環境には適していません。 Alibaba Cloud Elasticsearch は、負荷分散ドメイン名サービスを提供します。 したがって、PHP アプリケーションでは、接続プールとして SimpleConnectionPool を使用する必要があります。 そうしないと、Alibaba Cloud Elasticsearch クラスターの再起動時に接続エラーが発生する可能性があります。 アプリケーションは、再接続メカニズムも実装する必要があります。 SimpleConnectionPool を使用しても、クラスターの再起動時に「No enabled connection」などの接続エラーが発生することがあります。

    • Elasticsearch Python クライアント: Elasticsearch Python Client

    • その他の Elasticsearch クライアントの詳細については、「Elasticsearchクライアント」をご参照ください。

  • Elasticsearch クラスターの自動インデックス作成機能を有効にします。 詳細については、「YMLパラメーターの設定」をご参照ください。

  • ネットワーク接続を確保するために、Alibaba Cloud Elasticsearch クラスターのホワイトリストを設定します。

    • コードを実行するサーバーと Alibaba Cloud Elasticsearch クラスターが同じ Virtual Private Cloud (VPC) 内にある場合は、クラスターの内部エンドポイントを使用して接続します。 接続する前に、サーバーのプライベート IP アドレスを VPC のプライベート IP アドレスホワイトリスト (デフォルト:0.0.0.0/0) に追加します。

    • コードを実行するサーバーがパブリックネットワーク上にある場合は、クラスターのパブリックエンドポイントを使用して接続します。 パブリックエンドポイントを有効にし、サーバーのパブリック IP アドレスを Alibaba Cloud Elasticsearch クラスターのパブリック IP アドレスホワイトリストに追加します。 詳細については、「Elasticsearchクラスターのパブリックまたはプライベート IP アドレスホワイトリストの設定」をご参照ください。

      重要
      • Wi-Fi またはブロードバンドネットワークから接続する場合は、パブリック IP アドレスをホワイトリストに追加します。

      • ホワイトリストを 0.0.0.0/0 に設定して、すべての IPv4 アドレスが Elasticsearch クラスターにアクセスできるようにすることもできます。 この設定はクラスターをパブリックネットワークに公開し、セキュリティリスクが高まります。 関連するリスクを理解し、受け入れる場合にのみ、この設定を使用してください。

      • ホワイトリストが設定されていないか、正しく設定されていない場合、接続タイムアウト エラーが発生します。

      • クライアントから Kibana ノードにアクセスするには、Kibana のホワイトリストも設定する必要があります。 詳細については、「Kibanaを使用したクラスターへの接続」をご参照ください。

サンプルコード

次の例では、一般的なクライアントを使用して Alibaba Cloud Elasticsearch クラスターに接続する方法を説明します。

// この例では Go 1.19.1 を使用します。
package main

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

func main() {
  cfg := elasticsearch.Config {
    Addresses: []string{
      "<YourEsHost>",
    },
    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)
}
// この例では、高レベル REST クライアント V6.7 を使用します。
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.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class RestClientTest67 {

    private static final RequestOptions COMMON_OPTIONS;

    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();

        // デフォルトのキャッシュ制限は 100 MB です。この例では、値を 30 MB に変更します。
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    public static void main(String[] args) {
        // Alibaba Cloud Elasticsearch クラスターには基本認証が必要です。
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
       // Alibaba Cloud Elasticsearch クラスターの作成時に設定したユーザー名とパスワードを使用します。これらは Kibana コンソールのログイン認証情報でもあります。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));

        // ビルダーを使用して REST クライアントを作成し、HTTP クライアントの HttpClientConfigCallback を設定します。
       // クラスターエンドポイントを取得するには、Elasticsearch クラスターの ID をクリックして、[基本情報] ページに移動します。
        RestClientBuilder builder = RestClient.builder(new HttpHost("<YourEsHost>", 9200, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // RestHighLevelClient インスタンスは、REST 低レベルクライアントビルダーを使用して構築します。
        RestHighLevelClient highClient = new RestHighLevelClient(builder);

        try {
            // リクエストを作成します。
            Map<String, Object> jsonMap = new HashMap<>();
           jsonMap.put("<YourEsField1>", "<YourEsFieldValue1>");
           jsonMap.put("<YourEsField2>", "<YourEsFieldValue2>");
           IndexRequest indexRequest = new IndexRequest("<YourEsIndex>", "<YourEsType>", "<YourEsId>").source(jsonMap);

            // リクエストを同期的に実行し、カスタムリクエストオプション (COMMON_OPTIONS) を使用します。
            IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);

            long version = indexResponse.getVersion();

            System.out.println("Index document successfully! " + version);

            highClient.close();

        } catch (IOException ioException) {
            // 例外を処理します。
        }
    }
}
<?php
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;

$client = ClientBuilder::create()->setHosts([
  [
    'host'   => '<YourEsHost>',
    'port'   => '9200',
    'scheme' => 'http',
    'user'   => '<UserName>',
    'pass'   => '<YourPassword>'
  ]
])->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool', [])
  ->setRetries(10)->build();

$indexParams = [
  'index'  => '<YourEsIndex>',
  'type'   => '<YourEsType>',
  'id'     => '<YourEsId>',
  'body'   => ['<YourEsField>' => '<YourEsFieldValue>'],
  'client' => [
    'timeout'         => 10,
    'connect_timeout' => 10
  ]
];
$indexResponse = $client->index($indexParams);
print_r($indexResponse);

$searchParams = [
  'index'  => '<YourEsIndex>',
  'type'   => '<YourEsType>',
  'body'   => [
    'query' => [
      'match' => [
        '<YourEsField>' => '<YourEsFieldValue>'
      ]
    ]
  ],
  'client' => [
    'timeout'         => 10,
    'connect_timeout' => 10
  ]
];
$searchResponse = $client->search($searchParams);
print_r($searchResponse);
?>
from elasticsearch import Elasticsearch, RequestsHttpConnection
import certifi
es = Elasticsearch(
    ['<YourEsHost>'],
    http_auth=('<UserName>', '<YourPassword>'),
    port=9200,
    use_ssl=False
)
res = es.index(index="<YourEsIndex>", doc_type="<YourEsType>", id=<YourEsId>, body={"<YourEsField1>": "<YourEsFieldValue1>", "<YourEsField2>": "<YourEsFieldValue2>"})
res = es.get(index="<YourEsIndex>", doc_type="<YourEsType>", id=<YourEsId>)
print(res['_source'])

Elasticsearch クラスターが HTTPS プロトコルを使用している場合は、use_ssl の値を True に設定し、verify_certs=True を追加します。

es = Elasticsearch(
['<YourEsHost>'],
http_auth=('<UserName>', '<YourPassword>'),
port=9200,
use_ssl=True,
verify_certs=True
)

サンプルコードを使用する際は、次のプレースホルダーを実際の値に置き換えてください。

パラメーター

説明

<YourEsHost>

Alibaba Cloud Elasticsearch クラスターの内部またはパブリックエンドポイント。 エンドポイントは、クラスターまたはアプリケーション[基本情報] ページで確認できます。

<UserName>

Alibaba Cloud Elasticsearch クラスターのユーザー名は elastic です。

<YourPassword>

Alibaba Cloud Elasticsearch クラスターのユーザーのパスワードです。

パスワードを忘れた場合は、リセットできます。 Alibaba Cloud Elasticsearch クラスターの場合、このオプションはクラスター詳細ページの [セキュリティ] ページにあり。 詳細については、「Elasticsearchクラスターのアクセスパスワードのリセット」をご参照ください。

<YourEsIndex>

インデックスの名前です。

<YourEsType>

ドキュメントタイプです。

重要

7.0 より前の Elasticsearch バージョンでは、ドキュメントタイプをカスタマイズできました。 Elasticsearch 7.0 以降では、ドキュメントタイプは _doc です。

<YourEsId>

ドキュメント ID です。

<YourEsField>

フィールド名です。

<YourEsFieldValue>

指定されたフィールドの値です。