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

Elasticsearch:Low Level REST Client (5.x)

最終更新日:Mar 27, 2026

このトピックでは、Java Low Level REST Client 5.x を使用して、HTTP 経由で Java アプリケーションから Elasticsearch API を呼び出す方法について説明します。

重要

Java Low Level REST Client 5.x は、Alibaba Cloud Elasticsearch V5.5.3 のみと互換があります。Elasticsearch V6.3.2 をご利用の場合は、「Java REST Client 6.3.2」をご参照ください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • JDK 1.8 以降。「JDK をインストールする」をご参照ください。

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

  • クラスターで自動インデックス作成が有効になっています。「YML ファイルの設定」をご参照ください。自動インデックス作成が有効になっていない場合、次のエラーが表示されます:エラー

  • ご利用の Java サーバーとクラスター間のネットワークアクセスが設定済みであること:

    • インターネットアクセス: パブリックネットワークアクセス機能を有効にして、サーバーのパブリック IP アドレスをクラスターのパブリック IP アドレスホワイトリストに追加します。詳細については、「Elasticsearch クラスターのパブリックまたはプライベート IP アドレスホワイトリストを設定する」をご参照ください。

      重要
      • クライアントが家庭用ネットワークまたは企業内 LAN 上にある場合、クライアントのプライベート IP アドレスではなく、インターネット出口の IP アドレスをホワイトリストに登録してください。

      • ホワイトリストに 0.0.0.0/0 を追加すると、すべてのパブリック IPv4 アドレスからクラスターへのアクセスが許可されます。この設定を使用する前に、セキュリティリスクを十分に評価してください。

      • ホワイトリストにエントリが欠落している、または誤ったエントリが登録されていると、「Timeout connecting(接続タイムアウト)」エラーが発生します。

      • クライアントから Kibana にアクセスするには、Kibana 用の別のホワイトリストを設定します。詳細については、「Kibana のパブリックまたはプライベート IP アドレスホワイトリストを設定する」をご参照ください。

    • VPC 経由のアクセス:クラスターの内部エンドポイントを使用します。デフォルトでは、プライベート IP アドレスホワイトリストに 0.0.0.0/0 が既に登録されています。

  • Java Maven プロジェクト。

Maven 依存関係の追加

プロジェクトの pom.xml に以下の依存関係を追加します。クライアントのバージョンは、ご利用の Elasticsearch クラスターのバージョンと一致させる必要があります。

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>rest</artifactId>
    <version>5.5.3</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7.1</version>
</dependency>
重要

Apache Log4j 2 にはリモートコード実行(RCE)脆弱性が存在する可能性があります。詳細については、「脆弱性に関するお知らせ|Apache Log4j 2 の RCE 脆弱性」をご参照ください。

クラスターへの接続とリクエストの実行

完全なサンプルコードは、「サンプルコードのダウンロード」から入手できます。

すべてのサンプルは、ポート 9200 経由でクラスターに接続し、認証に BasicCredentialsProvider を使用します。

クライアントの初期化

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.RestClient;
import org.elasticsearch.client.RestClientBuilder;

// 認証情報の設定
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
        new UsernamePasswordCredentials("<username>", "<password>"));

// クライアントの構築。<host> は、クラスターの基本情報ページに記載されている
// パブリックまたは内部エンドポイントに置き換えてください。
RestClient restClient = RestClient.builder(new HttpHost("<host>", 9200))
        .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(
                    HttpAsyncClientBuilder httpClientBuilder) {
                return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
        }).build();

ドキュメントのインデックス登録と取得

以下の例では、ドキュメントをインデックス登録した後、そのドキュメントを取得しています。

import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Response;
import java.io.IOException;
import java.util.Collections;

public class RestClientTest55 {
    public static void main(String[] args) {

        // (上記の通り restClient を初期化)

        try {
            // PUT /index_name/type_name/doc_id でドキュメントをインデックス登録
            HttpEntity entity = new NStringEntity(
                    "{\n\"field_01\" : \"value_01\"\n,\n\"field_02\" : \"value_02\"\n}",
                    ContentType.APPLICATION_JSON);
            Response indexResponse = restClient.performRequest(
                    "PUT",
                    "/index_name/type_name/doc_id",
                    Collections.<String, String>emptyMap(),
                    entity);

            // GET /index_name/type_name/doc_id でドキュメントを取得
            Response response = restClient.performRequest(
                    "GET",
                    "/index_name/type_name/doc_id",
                    Collections.singletonMap("pretty", "true"));

            // 応答ボディを出力
            System.out.println(EntityUtils.toString(response.getEntity()));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以下のプレースホルダーを、実際の値に置き換えてください。

プレースホルダー 説明
<username> Elasticsearch クラスターのユーザー名
<password> Elasticsearch クラスターのパスワード
<host> クラスターのパブリックまたは内部エンドポイント。これは 基本情報 ページに記載されています。詳細については、「クラスターの基本情報を表示」をご参照ください。
index_name インデックス名
type_name タイプ名
doc_id ドキュメント ID

トラブルシューティング

症状 原因の可能性 対処方法
Timeout connecting IP アドレスホワイトリストにエントリが欠落している、または誤っている ご利用のサーバーの IP アドレスをクラスターのホワイトリストに追加してください。インターネット経由のアクセスの場合は、クライアントのプライベート IP アドレスではなく、インターネット出口の IP アドレスを使用してください。
インデックス作成エラー Error 自動インデックス作成機能が無効化されている 自動インデックス作成機能を有効化します。詳細については、「YML ファイルの設定」をご参照ください。

次のステップ