Topik ini menyediakan contoh kode dan catatan penting untuk menghubungkan ke kluster Alibaba Cloud Elasticsearch menggunakan client PHP, Python, Java, dan Go.
Prasyarat
-
Buat kluster Alibaba Cloud Elasticsearch. Untuk informasi selengkapnya, lihat Buat kluster Alibaba Cloud Elasticsearch.
-
Instal client Elasticsearch untuk bahasa pemrograman yang Anda pilih.
Gunakan versi client yang sesuai dengan versi Elasticsearch Anda untuk menghindari masalah kompatibilitas. Untuk informasi lebih lanjut tentang kompatibilitas versi antara Elasticsearch dan client-nya, lihat Compatibility.
-
Elasticsearch Go client: Elasticsearch Go Client.
CatatanSebelum menggunakan Go untuk menghubungkan ke kluster Alibaba Cloud Elasticsearch, instal lingkungan kompilasi Go. Untuk informasi selengkapnya, lihat The Go Programming Language. Contoh dalam topik ini menggunakan Go 1.19.1.
-
Elasticsearch Java client: Elasticsearch Java API Client.
Catatan-
Jenis client Java meliputi Transport Client, Low Level REST Client, High Level REST Client, dan Java API Client. Untuk contoh kode masing-masing jenis, lihat Java API. Topik ini menggunakan High Level REST Client V6.7 sebagai contoh.
-
Java Transport Client berkomunikasi dengan kluster Elasticsearch melalui TCP. Masalah kompatibilitas dapat terjadi ketika client digunakan untuk berkomunikasi dengan kluster Elasticsearch versi berbeda. Karena alasan ini, Transport Client sudah tidak digunakan lagi (deprecated) pada versi-versi terbaru. Jika Anda menggunakan Transport Client V5.5 atau V5.6 untuk menghubungkan ke kluster Elasticsearch V5.5 atau V5.6, error NoNodeAvailableException dapat terjadi. Gunakan Transport Client V5.3.3 atau Java Low Level REST Client untuk menghubungkan ke kluster Elasticsearch guna memastikan kompatibilitas versi.
-
-
Elasticsearch PHP client: Elasticsearch PHP Client.
CatatanKolam koneksi default yang disediakan oleh client Elasticsearch PHP tidak cocok untuk lingkungan cloud. Alibaba Cloud Elasticsearch menyediakan layanan nama domain dengan load balancing. Oleh karena itu, aplikasi PHP Anda harus menggunakan SimpleConnectionPool sebagai kolam koneksi. Jika tidak, error koneksi dapat terjadi saat kluster Alibaba Cloud Elasticsearch melakukan restart. Aplikasi juga harus menerapkan mekanisme reconnect. Bahkan dengan SimpleConnectionPool, error koneksi seperti "No enabled connection" masih dapat terjadi saat kluster Anda melakukan restart.
-
Elasticsearch Python client: Elasticsearch Python Client.
-
Untuk informasi lebih lanjut tentang client Elasticsearch lainnya, lihat Elasticsearch Clients.
-
-
Aktifkan fitur Auto Indexing untuk kluster Elasticsearch Anda. Untuk informasi selengkapnya, lihat Konfigurasi parameter YML.
-
Konfigurasikan daftar putih untuk kluster Alibaba Cloud Elasticsearch guna memastikan konektivitas jaringan.
-
Jika server tempat kode Anda dijalankan dan kluster Alibaba Cloud Elasticsearch berada dalam Virtual Private Cloud (VPC) yang sama, lakukan koneksi menggunakan titik akhir internal kluster. Sebelum menghubungkan, tambahkan alamat IP pribadi server ke daftar putih alamat IP pribadi VPC (default: 0.0.0.0/0).
-
Jika server tempat kode Anda dijalankan berada di jaringan publik, lakukan koneksi menggunakan titik akhir publik kluster. Aktifkan titik akhir publik dan tambahkan alamat IP publik server ke daftar putih alamat IP publik kluster Alibaba Cloud Elasticsearch. Untuk informasi selengkapnya, lihat Konfigurasi daftar putih alamat IP publik atau pribadi untuk kluster Elasticsearch.
Penting-
Jika Anda menghubungkan dari jaringan Wi-Fi atau broadband, tambahkan alamat IP publik Anda ke daftar putih.
-
Anda juga dapat mengatur daftar putih menjadi 0.0.0.0/0 untuk mengizinkan semua alamat IPv4 mengakses kluster Elasticsearch. Konfigurasi ini membuka kluster ke jaringan publik dan meningkatkan risiko keamanan. Gunakan pengaturan ini hanya jika Anda memahami dan menerima risiko yang terkait.
-
Jika tidak ada daftar putih yang dikonfigurasi atau dikonfigurasi secara salah, akan muncul error
connection timeout. -
Untuk mengakses node Kibana dari client, Anda juga harus mengonfigurasi daftar putih untuk Kibana. Untuk informasi selengkapnya, lihat Hubungkan ke kluster menggunakan Kibana.
-
-
Contoh kode
Contoh berikut menunjukkan cara menghubungkan ke kluster Alibaba Cloud Elasticsearch menggunakan client umum.
// Contoh ini menggunakan 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)
}// Contoh ini menggunakan 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();
// Batas cache default adalah 100 MB. Contoh ini mengubah nilai menjadi 30 MB.
builder.setHttpAsyncResponseConsumerFactory(
new HttpAsyncResponseConsumerFactory
.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
COMMON_OPTIONS = builder.build();
}
public static void main(String[] args) {
// Kluster Alibaba Cloud Elasticsearch memerlukan autentikasi dasar.
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
// Gunakan username dan password yang Anda konfigurasi saat membuat kluster Alibaba Cloud Elasticsearch. Ini juga merupakan kredensial logon untuk konsol Kibana.
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));
// Gunakan builder untuk membuat REST client dan konfigurasikan HttpClientConfigCallback dari HTTP client.
// Untuk mendapatkan titik akhir kluster, klik ID kluster Elasticsearch Anda dan buka halaman Informasi Dasar.
RestClientBuilder builder = RestClient.builder(new HttpHost("<YourEsHost>", 9200, "http"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
// Instance RestHighLevelClient dibuat menggunakan builder REST client tingkat rendah.
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);
// Jalankan permintaan secara sinkron dan gunakan opsi permintaan khusus (COMMON_OPTIONS).
IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);
long version = indexResponse.getVersion();
System.out.println("Dokumen berhasil diindeks! " + 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'])Jika kluster Elasticsearch Anda menggunakan protokol HTTPS, atur nilai use_ssl menjadi True dan tambahkan verify_certs=True.
es = Elasticsearch(
['<YourEsHost>'],
http_auth=('<UserName>', '<YourPassword>'),
port=9200,
use_ssl=True,
verify_certs=True
)
Saat menggunakan contoh kode, ganti placeholder berikut dengan nilai aktualnya.
|
Parameter |
Deskripsi |
|
<YourEsHost> |
Titik akhir internal atau publik kluster Alibaba Cloud Elasticsearch. Titik akhir tersedia di halaman Informasi Dasar kluster atau aplikasi Anda. |
|
<UserName> |
Username kluster Alibaba Cloud Elasticsearch adalah |
|
<YourPassword> |
Password untuk pengguna kluster Alibaba Cloud Elasticsearch. Jika Anda lupa password, Anda dapat mengatur ulang. Untuk kluster Alibaba Cloud Elasticsearch, opsi ini tersedia di halaman Keamanan pada halaman detail kluster. Untuk informasi selengkapnya, lihat Atur ulang password akses untuk kluster Elasticsearch. |
|
<YourEsIndex> |
Nama indeks. |
|
<YourEsType> |
Jenis dokumen. Penting
Pada versi Elasticsearch sebelum 7.0, jenis dokumen dapat dikustomisasi. Pada Elasticsearch 7.0 dan seterusnya, jenis dokumen adalah |
|
<YourEsId> |
ID dokumen. |
|
<YourEsField> |
Nama bidang. |
|
<YourEsFieldValue> |
Nilai untuk bidang yang ditentukan. |