Large-Scale Price Reduction

最大 59% オフ

平均で 23% 節約

詳細を表示
このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

クライアントを使用してAlibaba Cloud Elasticsearchクラスターにアクセスする

更新日時2025-01-10 20:54

このトピックでは、PHP、Python、Java、または Go クライアントを使用して Alibaba Cloud Elasticsearch クラスターにアクセスする方法について説明します。また、各クライアントタイプのサンプルコードと使用上の注意も提供します。

準備

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

  • 必要なプログラミング言語を使用するElasticsearchクライアントをインストールします。

    非互換性の問題を防ぐため、作成したElasticsearchクラスターと同じバージョンのクライアントをインストールすることをお勧めします。 Elasticsearchクラスターとクライアント間のバージョンの互換性については、互換性をご参照ください。

    • Elasticsearch Go クライアントについては、Elasticsearch Go クライアントをご参照ください。

      説明

      Go クライアントを使用してElasticsearchクラスターにアクセスする前に、Go のコンパイル環境をインストールする必要があります。詳細については、Go プログラミング言語をご参照ください。この例では、Go 1.19.1 が使用されています。

    • Elasticsearch Java クライアントについては、Elasticsearch Java API クライアントをご参照ください。

      説明
      • Java クライアントには、Transport Client、Low Level REST Client、High Level REST Client、および Java API Client が含まれます。各クライアントタイプのサンプルコードについては、概要をご参照ください。この例では、High Level REST Client 6.7 が使用されています。

      • Java Transport Client は、TCP 経由でElasticsearchクラスターと通信します。 Java Transport Client が、Java Transport Client のバージョンと一致しないバージョンのElasticsearchクラスターと通信する場合、非互換性の問題が発生する可能性があります。オープンソースのElasticsearchの新しいバージョンでは、Transport Client は非推奨となっています。 Transport Client 5.5 を使用してElasticsearch V5.5 クラスターにアクセスする場合、または Transport Client 5.6 を使用してElasticsearch V5.6 クラスターにアクセスする場合、システムは NoNodeAvailableException エラーメッセージを報告します。バージョンの互換性を確保するために、Transport Client 5.3.3 または Java Low Level REST Client を使用してElasticsearchクラスターにアクセスすることをお勧めします。

    • Elasticsearch PHP クライアントについては、Elasticsearch PHP クライアントをご参照ください。

      説明

      オープンソースのElasticsearchのPHPクライアントによって提供されるデフォルトの接続プールは、クラウド内のサービスへのアクセスには適していません。 Alibaba Cloud Elasticsearchは、ロードバランシングに基づいてクライアントから送信されたリクエストを処理します。したがって、PHPクライアントは、接続プールとして SimpleConnectionPool を使用する必要があります。 SimpleConnectionPool が接続プールとして使用されていない場合、Alibaba Cloud Elasticsearchクラスターの再起動時に接続エラーが発生します。さらに、PHPクライアントは、クライアントが切断された後にElasticsearchクラスターに再接続するように構成する必要があります。これは、PHPクライアントが SimpleConnectionPool を接続プールとして使用している場合でも、Alibaba Cloud Elasticsearchクラスターの再起動中に接続エラーが発生する可能性があるためです。たとえば、「有効な接続がありません」というエラーメッセージが報告される場合があります。

    • Elasticsearch Python クライアントについては、Elasticsearch Python クライアントをご参照ください。

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

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

  • ネットワーク接続を確保するために、Elasticsearchクラスターの IP アドレスホワイトリストを構成します。

    • コードを実行するサーバーがElasticsearchクラスターと同じ仮想プライベートクラウド (VPC) 内にある場合、クラスターの内部エンドポイントを使用してクラスターにアクセスできます。 Elasticsearchクラスターにアクセスする前に、サーバーのプライベート IP アドレスがクラスターのプライベート IP アドレスホワイトリストに追加されていることを確認してください。デフォルトでは、0.0.0.0/0 がプライベート IP アドレスホワイトリストに追加されます。

    • コードを実行するサーバーがインターネット上にある場合、クラスターのパブリックエンドポイントを使用してElasticsearchクラスターにアクセスできます。 Elasticsearchクラスターのパブリックネットワークアクセス機能を有効にし、サーバーのパブリック IP アドレスを Elasticsearchクラスターのパブリック IP アドレスホワイトリストに追加する必要があります。詳細については、Elasticsearchクラスターのパブリックまたはプライベート IP アドレスホワイトリストの構成をご参照ください。

      重要
      • Wi-Fi やブロードバンドネットワークなどのパブリックネットワークを使用する場合は、パブリックネットワークのアウトバウンドトラフィックを制御するジャンプサーバーの IP アドレスをElasticsearchクラスターの IP アドレスホワイトリストに追加します。

      • すべての IPv4 アドレスからクラスターへのアクセスを許可するために、Elasticsearchクラスターの IP アドレスホワイトリストに 0.0.0.0/0 を追加できます。この構成を行うと、すべてのパブリック IPv4 アドレスを使用してElasticsearchクラスターにアクセスできます。これはセキュリティリスクをもたらします。この構成を行う前に、リスクを評価することをお勧めします。

      • IP アドレスホワイトリストが構成されていないか、IP アドレスホワイトリストが正しく構成されていない場合、システムは接続タイムアウトエラーを示す Timeout connecting エラーメッセージを報告します。

      • クライアントからクラスター内のKibanaノードにアクセスする場合は、Kibanaサービスの IP アドレスホワイトリストを構成する必要があります。詳細については、Kibana のパブリックまたはプライベート IP アドレスホワイトリストの構成をご参照ください。

サンプルコード

このセクションでは、Alibaba Cloud Elasticsearchクラスターにアクセスするために使用できる各クライアントタイプのサンプルコードを提供します。

Go
Java
PHP
Python
// この例では、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)
}
// この例では、High Level REST Client 6.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 MiB です。30 MiB に変更します。
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    public static void main(String[] args) {
        // Elasticsearchクラスターにベーシック認証を使用します。
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
       // Elasticsearchクラスターを作成するときに指定したユーザー名とパスワードを使用します。ユーザー名とパスワードを使用して、ElasticsearchクラスターのKibanaコンソールにログオンすることもできます。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));

        // ビルダーを使用してJava RESTクライアントを作成し、HTTPクライアントのHttpClientConfigCallbackを構成します。
       // Elasticsearchクラスターのパブリックエンドポイントを指定します。 Elasticsearchコンソールの [Elasticsearchクラスター] ページでElasticsearchクラスターを見つけ、クラスター ID をクリックし、Elasticsearchクラスターの [基本情報] ページからエンドポイントを取得できます。
        RestClientBuilder builder = RestClient.builder(new HttpHost("<YourEsHost>", 9200, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // REST low-level clientビルダーを使用して、RestHighLevelClientインスタンスを作成します。
        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);

            // 同期実行を実装し、RequestOptionsのカスタム構成 (COMMON_OPTIONS) を使用します。
            IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);

            long version = indexResponse.getVersion();

            System.out.println("ドキュメントのインデックス作成に成功しました! " + 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();
// SimpleConnectionPool を使用し、再試行回数を 10 に設定します。

$indexParams = [
  'index'  => '<YourEsIndex>',
  'type'   => '<YourEsType>',
  'id'     => '<YourEsId>',
  'body'   => ['<YourEsField>' => '<YourEsFieldValue>'],
  'client' => [
    'timeout'         => 10,  // タイムアウトを 10 秒に設定します。
    'connect_timeout' => 10 // 接続タイムアウトを 10 秒に設定します。
  ]
];
$indexResponse = $client->index($indexParams);
print_r($indexResponse);

$searchParams = [
  'index'  => '<YourEsIndex>',
  'type'   => '<YourEsType>',
  'body'   => [
    'query' => [
      'match' => [
        '<YourEsField>' => '<YourEsFieldValue>'
      ]
    ]
  ],
  'client' => [
    'timeout'         => 10, // タイムアウトを 10 秒に設定します。
    'connect_timeout' => 10 // 接続タイムアウトを 10 秒に設定します。
  ]
];
$searchResponse = $client->search($searchParams);
print_r($searchResponse);
?>
# HTTP 認証を使用します。
from elasticsearch import Elasticsearch, RequestsHttpConnection
import certifi
es = Elasticsearch(
    ['<YourEsHost>'],
    http_auth=('<UserName>', '<YourPassword>'),
    port=9200,
    use_ssl=False  // SSL を使用しません。
)
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'])

上記のコードは、HTTP が有効になっているElasticsearchクラスターにアクセスするためにクライアントを使用する方法のみを示しています。 ElasticsearchクラスターでHTTPSが有効になっている場合は、次のコードに示すように、use_ssl の値を True に変更し、verify_certs=True を追加する必要があります。

es = Elasticsearch(
['<YourEsHost>'],
http_auth=('<UserName>', '<YourPassword>'),
port=9200,
use_ssl=True, // SSL を使用します。
verify_certs=True // 証明書を検証します。
)

上記のコードを使用する場合は、次の表にリストされているパラメーターを実際の値に置き換える必要があります。

パラメーター

説明

パラメーター

説明

<YourEsHost>

Elasticsearch クラスターのパブリックエンドポイントまたは内部エンドポイント。Elasticsearch コンソールの Elasticsearch クラスターの [基本情報] ページに移動して、パブリックエンドポイントまたは内部エンドポイントを取得できます。

<UserName>

Elasticsearch クラスターのユーザー名。ユーザー名は elastic

<YourPassword>

Elasticsearch クラスターのパスワード。

パスワードを忘れた場合は、[セキュリティ] ページに移動してパスワードをリセットできます。詳細については、Elasticsearch クラスターのアクセスパスワードのリセットをご参照ください。

<YourEsIndex>

Elasticsearch クラスター内のインデックスの名前。

<YourEsType>

ドキュメントのタイプ。

重要

V7.0 より前のバージョンの Elasticsearch クラスターを使用している場合は、ビジネス要件に基づいてドキュメントタイプを指定できます。 V7.0 以降の Elasticsearch クラスターの場合、ドキュメントタイプは _doc に固定されています。

<YourEsId>

ドキュメントの ID。

<YourEsField>

フィールドの名前。

<YourEsFieldValue>

<YourEsField> で指定されたフィールドの値。

  • 目次 (1, M)
  • 準備
  • サンプルコード
フィードバック
phone お問い合わせ

Chat now with Alibaba Cloud Customer Service to assist you in finding the right products and services to meet your needs.

alicare alicarealicarealicare