Tous les produits
Search
Centre de documentation

Elasticsearch:Connexion à un cluster Alibaba Cloud Elasticsearch

Dernière mise à jour :Aug 09, 2026

Cette rubrique fournit des exemples de code et des informations importantes pour connecter un Alibaba Cloud Elasticsearch cluster à l'aide de clients PHP, Python, Java et Go.

Prérequis

  • Créez un Alibaba Cloud Elasticsearch cluster. Pour plus d'informations, consultez Création d'un cluster Alibaba Cloud Elasticsearch.

  • Installez le client Elasticsearch correspondant au langage de programmation souhaité.

    Utilisez une version du client compatible avec votre version d'Elasticsearch afin d'éviter les problèmes de compatibilité. Pour en savoir plus sur la compatibilité des versions entre Elasticsearch et les clients, consultez Compatibility.

    • Client Elasticsearch Go : Elasticsearch Go Client.

      Remarque

      Avant d'utiliser Go pour vous connecter à un cluster Alibaba Cloud Elasticsearch, installez un environnement de compilation Go. Pour plus d'informations, consultez The Go Programming Language. Les exemples présentés dans cette rubrique utilisent Go 1.19.1.

    • Client Elasticsearch Java : Elasticsearch Java API Client.

      Remarque
      • Les types de clients Java incluent Transport Client, Low Level REST Client, High Level REST Client et Java API Client. Pour obtenir des exemples de code pour chaque type, consultez Java API. Cette rubrique utilise High Level REST Client V6.7 à titre d'exemple.

      • Le Java Transport Client communique avec un cluster Elasticsearch via TCP. Des problèmes de compatibilité peuvent survenir lorsque ce client est utilisé pour communiquer avec des clusters Elasticsearch de différentes versions. C'est pourquoi le Transport Client est déprécié dans les versions ultérieures. Si vous utilisez le Transport Client V5.5 ou V5.6 pour vous connecter à un cluster Elasticsearch V5.5 ou V5.6, une erreur NoNodeAvailableException peut se produire. Utilisez le Transport Client V5.3.3 ou le Java Low Level REST Client pour vous connecter au cluster Elasticsearch et garantir la compatibilité des versions.

    • Client Elasticsearch PHP : Elasticsearch PHP Client.

      Remarque

      Le pool de connexions par défaut fourni par le client Elasticsearch PHP n'est pas adapté aux environnements cloud. Alibaba Cloud Elasticsearch propose un service de nom de domaine équilibré en charge. Par conséquent, votre application PHP doit utiliser SimpleConnectionPool comme pool de connexions. Dans le cas contraire, des erreurs de connexion peuvent survenir lors du redémarrage de votre cluster Alibaba Cloud Elasticsearch. L'application doit également implémenter un mécanisme de reconnexion. Même avec SimpleConnectionPool, des erreurs de connexion telles que « No enabled connection » peuvent toujours se produire lors du redémarrage du cluster.

    • Client Elasticsearch Python : Elasticsearch Python Client.

    • Pour plus d'informations sur les autres clients Elasticsearch, consultez Elasticsearch Clients.

  • Activez la fonctionnalité Auto Indexing pour votre cluster Elasticsearch. Pour plus d'informations, consultez Configuration des paramètres YML.

  • Configurez une liste d'autorisation pour le cluster Alibaba Cloud Elasticsearch afin de garantir la connectivité réseau.

    • Si le serveur qui exécute votre code et le cluster Alibaba Cloud Elasticsearch se trouvent dans le même Virtual Private Cloud (VPC), connectez-vous à l'aide du point de terminaison interne du cluster. Avant la connexion, ajoutez l'adresse IP privée du serveur à la liste d'autorisation des adresses IP privées du VPC (par défaut : 0.0.0.0/0).

    • Si le serveur exécutant votre code se trouve sur le réseau public, connectez-vous à l'aide du point de terminaison public du cluster. Activez le point de terminaison public et ajoutez l'adresse IP publique du serveur à la liste d'autorisation des adresses IP publiques du cluster Alibaba Cloud Elasticsearch. Pour plus d'informations, consultez Configuration d'une liste d'autorisation d'adresses IP publiques ou privées pour un cluster Elasticsearch.

      Important
      • Si vous vous connectez depuis un réseau Wi-Fi ou haut débit, ajoutez votre adresse IP publique à la liste d'autorisation.

      • Vous pouvez également définir la liste d'autorisation sur 0.0.0.0/0 pour autoriser toutes les adresses IPv4 à accéder au cluster Elasticsearch. Cette configuration expose le cluster au réseau public et augmente les risques de sécurité. N'utilisez ce paramètre que si vous comprenez et acceptez les risques associés.

      • Si aucune liste d'autorisation n'est configurée ou si elle est mal configurée, une erreur connection timeout se produit.

      • Pour accéder aux nœuds Kibana depuis un client, vous devez également configurer une liste d'autorisation pour Kibana. Pour plus d'informations, consultez Connexion à un cluster à l'aide de Kibana.

Exemples de code

Les exemples suivants montrent comment se connecter à un cluster Alibaba Cloud Elasticsearch à l'aide de clients courants.

// This example uses 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)
}
// This example uses High Level REST Client 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();

        // The default cache limit is 100 MB. This example changes the value to 30 MB.
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    public static void main(String[] args) {
        // Alibaba Cloud Elasticsearch clusters require basic authentication.
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
       // Use the username and password that you configured when you created the Alibaba Cloud Elasticsearch cluster. They are also the logon credentials for the Kibana console.
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));

        // Use a builder to create a REST client and configure the HttpClientConfigCallback of the HTTP client.
       // To obtain the cluster endpoint, click the ID of your Elasticsearch cluster and go to the Basic Information page.
        RestClientBuilder builder = RestClient.builder(new HttpHost("<YourEsHost>", 9200, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // A RestHighLevelClient instance is built using a REST low-level client builder.
        RestHighLevelClient highClient = new RestHighLevelClient(builder);

        try {
            // Create a request.
            Map<String, Object> jsonMap = new HashMap<>();
           jsonMap.put("<YourEsField1>", "<YourEsFieldValue1>");
           jsonMap.put("<YourEsField2>", "<YourEsFieldValue2>");
           IndexRequest indexRequest = new IndexRequest("<YourEsIndex>", "<YourEsType>", "<YourEsId>").source(jsonMap);

            // Synchronously execute the request and use custom request options (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) {
            // Handle exceptions.
        }
    }
}
<?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'])

Si votre cluster Elasticsearch utilise le protocole HTTPS, définissez la valeur de use_ssl sur True et ajoutez verify_certs=True.

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

Lorsque vous utilisez l'exemple de code, remplacez les espaces réservés suivants par leurs valeurs réelles.

Paramètre

Description

<YourEsHost>

Le point de terminaison interne ou public du cluster Alibaba Cloud Elasticsearch. Le point de terminaison est disponible sur la page Basic Information de votre cluster ou application.

<UserName>

Le nom d'utilisateur du cluster Alibaba Cloud Elasticsearch est elastic.

<YourPassword>

Le mot de passe de l'utilisateur du cluster Alibaba Cloud Elasticsearch.

Si vous avez oublié le mot de passe, vous pouvez le réinitialiser. Pour un cluster Alibaba Cloud Elasticsearch, cette option se trouve sur la page Security de la page des détails du cluster. Pour plus d'informations, consultez Réinitialisation du mot de passe d'accès pour un cluster Elasticsearch.

<YourEsIndex>

Le nom de l'index.

<YourEsType>

Le type de document.

Important

Dans les versions d'Elasticsearch antérieures à la 7.0, le type de document pouvait être personnalisé. Dans Elasticsearch 7.0 et versions ultérieures, le type de document est _doc.

<YourEsId>

L'ID du document.

<YourEsField>

Le nom du champ.

<YourEsFieldValue>

La valeur du champ spécifié.