全部产品
Search
文档中心

Elasticsearch:Gunakan klien untuk mengakses cluster Elasticsearch Alibaba Cloud

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan klien PHP, Python, Java, atau Go untuk mengakses cluster Elasticsearch Alibaba Cloud. Topik ini juga menyediakan kode contoh dan catatan penggunaan untuk setiap jenis klien.

Persiapan

  • Buat cluster Elasticsearch Alibaba Cloud. Untuk informasi lebih lanjut, lihat Buat Cluster Elasticsearch Alibaba Cloud.

  • Instal klien Elasticsearch yang sesuai dengan bahasa pemrograman yang digunakan.

    Untuk mencegah masalah ketidakcocokan versi, disarankan untuk menginstal klien dengan versi yang sama dengan versi cluster Elasticsearch. Informasi lebih lanjut tentang kompatibilitas versi antara cluster Elasticsearch dan klien dapat ditemukan di Kompatibilitas.

    • Informasi tentang klien Elasticsearch Go dapat ditemukan di Klien Elasticsearch Go.

      Catatan

      Sebelum menggunakan klien Go untuk mengakses cluster Elasticsearch, instal lingkungan kompilasi untuk Go. Informasi lebih lanjut tersedia di Bahasa Pemrograman Go. Contoh ini menggunakan Go 1.19.1.

    • Informasi tentang klien Elasticsearch Java dapat ditemukan di Klien API Java Elasticsearch.

      Catatan
      • Klien Java mencakup Transport Client, Low Level REST Client, High Level REST Client, dan Java API Client. Informasi lebih lanjut tentang kode contoh untuk setiap jenis klien dapat ditemukan di Klien Java. Contoh ini menggunakan High Level REST Client 6.7.

      • Java Transport Client berkomunikasi dengan cluster Elasticsearch melalui TCP. Jika versi Java Transport Client tidak sesuai dengan versi cluster Elasticsearch, masalah ketidakcocokan dapat terjadi. Di versi terbaru Elasticsearch open source, Transport Client sudah tidak direkomendasikan lagi. Jika Anda menggunakan Transport Client 5.5 untuk mengakses cluster Elasticsearch V5.5 atau Transport Client 5.6 untuk mengakses cluster Elasticsearch V5.6, sistem akan melaporkan pesan kesalahan NoNodeAvailableException. Untuk memastikan kompatibilitas versi, disarankan menggunakan Transport Client 5.3.3 atau Java Low Level REST Client untuk mengakses cluster Elasticsearch.

    • Informasi tentang klien Elasticsearch PHP dapat ditemukan di Klien Elasticsearch PHP.

      Catatan

      Kolam koneksi default yang disediakan oleh klien PHP Elasticsearch open source tidak cocok untuk mengakses layanan cloud. Alibaba Cloud Elasticsearch menangani permintaan dari klien berdasarkan load balancing. Oleh karena itu, klien PHP harus menggunakan SimpleConnectionPool sebagai kolam koneksi. Jika SimpleConnectionPool tidak digunakan, kesalahan koneksi dapat terjadi saat cluster Elasticsearch Alibaba Cloud di-restart. Selain itu, klien PHP harus dikonfigurasi untuk menyambung kembali ke cluster Elasticsearch setelah terputus. Hal ini karena kesalahan koneksi juga dapat terjadi selama restart meskipun klien PHP menggunakan SimpleConnectionPool. Sebagai contoh, pesan kesalahan No enabled connection mungkin dilaporkan.

    • Informasi tentang klien Elasticsearch Python dapat ditemukan di Klien Elasticsearch Python.

    • Informasi tentang klien Elasticsearch lainnya dapat ditemukan di Klien Elasticsearch.

  • Aktifkan fitur Auto Indexing untuk cluster Elasticsearch. Informasi lebih lanjut dapat ditemukan di Konfigurasikan File YML.

  • Konfigurasikan daftar putih alamat IP untuk cluster Elasticsearch untuk memastikan konektivitas jaringan.

    • Jika server yang menjalankan kode berada di virtual private cloud (VPC) yang sama dengan cluster Elasticsearch, Anda dapat mengakses cluster tersebut menggunakan endpoint internal. Pastikan bahwa alamat IP pribadi server ditambahkan ke daftar putih alamat IP pribadi cluster. Secara default, 0.0.0.0/0 ditambahkan ke daftar putih alamat IP pribadi.

    • Jika server yang menjalankan kode berada di Internet, Anda dapat mengakses cluster Elasticsearch menggunakan endpoint publik. Aktifkan fitur Akses Jaringan Publik untuk cluster Elasticsearch dan tambahkan alamat IP publik server ke daftar putih alamat IP publik cluster Elasticsearch. Informasi lebih lanjut dapat ditemukan di Konfigurasikan Daftar Putih Alamat IP Publik atau Pribadi untuk Cluster Elasticsearch.

      Penting
      • Jika Anda menggunakan jaringan publik seperti Wi-Fi atau jaringan broadband, tambahkan alamat IP server lompat yang mengontrol lalu lintas keluar dari jaringan publik ke daftar putih alamat IP cluster Elasticsearch.

      • Anda dapat menambahkan 0.0.0.0/0 ke daftar putih alamat IP cluster Elasticsearch untuk mengizinkan akses dari semua alamat IPv4 ke cluster. Konfigurasi ini menimbulkan risiko keamanan. Evaluasilah risiko sebelum membuat konfigurasi ini.

      • Jika tidak ada daftar putih alamat IP yang dikonfigurasi atau jika daftar putih alamat IP dikonfigurasi secara salah, sistem akan melaporkan pesan kesalahan Timeout connecting untuk menunjukkan kesalahan timeout koneksi.

      • Jika Anda ingin mengakses node Kibana di cluster Anda dari klien, konfigurasikan daftar putih alamat IP untuk layanan Kibana. Informasi lebih lanjut dapat ditemukan di Konfigurasikan Akses ke Kibana melalui Internet atau VPC.

Kode Contoh

Bagian ini menyediakan kode contoh untuk setiap jenis klien yang dapat digunakan untuk mengakses cluster Elasticsearch Alibaba Cloud.

// Dalam contoh ini, klien Go 1.19.1 digunakan. 
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)
}
// Dalam contoh ini, High Level REST Client 6.7 digunakan. 
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();

        // Ukuran cache default adalah 100 MiB. Ubah menjadi 30 MiB. 
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    public static void main(String[] args) {
        // Gunakan autentikasi dasar untuk cluster Elasticsearch. 
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
       // Gunakan nama pengguna dan kata sandi yang ditentukan saat Anda membuat cluster Elasticsearch. Anda juga dapat menggunakan nama pengguna dan kata sandi untuk masuk ke konsol Kibana cluster Elasticsearch. 
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));

        // Buat klien REST Java menggunakan pembuat dan konfigurasikan HttpClientConfigCallback untuk klien HTTP. 
       // Tentukan endpoint publik cluster Elasticsearch. Anda dapat menemukan cluster Elasticsearch di halaman Cluster Elasticsearch di konsol Elasticsearch, klik ID cluster, dan kemudian peroleh endpoint dari halaman Informasi Dasar cluster Elasticsearch. 
        RestClientBuilder builder = RestClient.builder(new HttpHost("<YourEsHost>", 9200, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // Gunakan pembuat klien REST low-level untuk membuat instance RestHighLevelClient. 
        RestHighLevelClient highClient = new RestHighLevelClient(builder);

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

            // Implementasikan eksekusi sinkron dan gunakan konfigurasi kustom (COMMON_OPTIONS) dari RequestOptions: 
            IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);

            long version = indexResponse.getVersion();

            System.out.println("Dokumen indeks berhasil! " + version);

            highClient.close();

        } catch (IOException ioException) {
            // Tangani pengecualian. 
        }
    }
}
<?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'])

Kode di atas hanya menunjukkan bagaimana klien digunakan untuk mengakses cluster Elasticsearch yang diaktifkan HTTP. Jika HTTPS diaktifkan untuk cluster Elasticsearch, ubah nilai use_ssl menjadi True dan tambahkan verify_certs=True, seperti yang ditunjukkan dalam kode berikut.

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

Saat menggunakan kode di atas, ganti parameter dalam tabel berikut dengan nilai aktual.

Parameter

Deskripsi

<YourEsHost>

Endpoint publik atau internal cluster Elasticsearch. Anda dapat pergi ke halaman Informasi Dasar cluster Elasticsearch di konsol Elasticsearch untuk mendapatkan endpoint publik atau internal.

<UserName>

Nama pengguna cluster Elasticsearch. Nama pengguna adalah elastic.

<YourPassword>

Kata sandi untuk cluster Elasticsearch.

Jika Anda lupa kata sandi, Anda dapat pergi ke halaman Keamanan untuk menyetel ulang kata sandi. Untuk informasi lebih lanjut, lihat Setel ulang kata sandi akses untuk cluster Elasticsearch.

<YourEsIndex>

Nama indeks dalam cluster Elasticsearch.

<YourEsType>

Tipe dokumen.

Penting

Jika Anda menggunakan cluster Elasticsearch dengan versi sebelum V7.0, Anda dapat menentukan tipe dokumen sesuai kebutuhan bisnis. Untuk cluster Elasticsearch versi V7.0 atau lebih baru, tipe dokumen tetap sebagai _doc.

<YourEsId>

ID dokumen.

<YourEsField>

Nama bidang.

<YourEsFieldValue>

Nilai bidang yang ditentukan oleh <YourEsField>.