Topik ini menjelaskan cara menggunakan Klien REST Tingkat Tinggi Java 6.3.x untuk memanggil Elasticsearch Java API.
Persiapan
Instal JDK. Versi JDK harus 1.8 atau yang lebih baru.
Untuk informasi lebih lanjut, lihat Instal JDK.
Buat kluster Elasticsearch Alibaba Cloud. Pastikan versi kluster sama dengan atau lebih baru dari versi Klien REST Tingkat Tinggi Java yang digunakan.
Dalam contoh ini, kluster Elasticsearch V6.3.2 dibuat. Untuk informasi lebih lanjut tentang cara membuat kluster, lihat Buat kluster Elasticsearch Alibaba Cloud.
PentingKlien REST Tingkat Tinggi Java kompatibel ke depan. Sebagai contoh, Klien REST Tingkat Tinggi Java 6.3.2 dapat berkomunikasi dengan kluster Elasticsearch versi V6.3.2 atau yang lebih baru. Untuk memastikan Anda dapat menggunakan fitur klien baru, disarankan agar versi Klien REST Tingkat Tinggi Java yang digunakan sama dengan versi kluster.
Aktifkan fitur Auto Indexing untuk kluster Elasticsearch.
Untuk informasi lebih lanjut, lihat Konfigurasikan file YML.
Jika fitur Auto Indexing tidak diaktifkan, kesalahan berikut akan dilaporkan.

Konfigurasikan daftar putih alamat IP untuk kluster Elasticsearch untuk memastikan komunikasi normal antar jaringan.
Jika server yang menjalankan kode Java berada di lingkungan Internet, Anda dapat mengakses kluster menggunakan endpoint publiknya. Sebelum mengakses kluster, aktifkan fitur Akses Jaringan Publik untuk kluster dan tambahkan alamat IP publik server ke daftar putih alamat IP publik kluster. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih alamat IP publik atau pribadi untuk kluster Elasticsearch.
PentingJika klien Anda berada di jaringan rumah atau LAN kantor, tambahkan alamat IP egress Internet ke daftar putih, bukan alamat IP pribadi klien.
Anda juga dapat menambahkan 0.0.0.0/0 ke daftar putih untuk mengizinkan permintaan dari semua alamat IPv4. Konfigurasi ini menimbulkan risiko keamanan. Evaluasi risiko sebelum menerapkannya.
Jika tidak ada daftar putih alamat IP yang dikonfigurasi atau salah dikonfigurasi, sistem melaporkan pesan kesalahan "Timeout connecting" untuk menunjukkan timeout koneksi.
Jika ingin mengakses node Kibana di kluster Anda dari klien, konfigurasikan daftar putih alamat IP untuk Kibana. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih alamat IP publik atau pribadi untuk Kibana.
Jika server yang menjalankan kode Java berada di virtual private cloud (VPC) yang sama dengan kluster Elasticsearch, Anda dapat mengakses kluster menggunakan endpoint internalnya. Sebelum mengakses kluster Elasticsearch, pastikan alamat IP pribadi server ditambahkan ke daftar putih alamat IP pribadi kluster. Secara default, 0.0.0.0/0 telah ditambahkan ke daftar putih.
Buat proyek Java Maven dan tambahkan dependensi Model Objek Proyek (POM) berikut ke file pom.xml proyek.
Dependensi POM
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.20.0</version>
</dependency>Vulnerabilitas eksekusi kode jarak jauh (RCE) mungkin ada di Apache Log4j. Untuk informasi lebih lanjut, lihat Pemberitahuan Kerentanan | Vulnerabilitas RCE di Apache Log4j 2.
Contoh
Unduh kode sampel lengkap.
Kode berikut memanggil API indeks untuk membuat indeks dan memanggil API hapus untuk menghapus indeks.
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.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class RestClientTest63 {
public static void main(String[] args) {
// Gunakan otentikasi akses dasar untuk kluster Elasticsearch.
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
// Gunakan nama pengguna dan kata sandi yang ditentukan saat Anda membuat kluster Elasticsearch. Anda juga dapat menggunakan nama pengguna dan kata sandi untuk masuk ke konsol Kibana kluster.
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{Username}", "{Password}"));
// Buat klien REST Java menggunakan pembuat dan konfigurasikan HttpClientConfigCallback untuk klien HTTP.
// Tentukan endpoint publik kluster Elasticsearch. Anda bisa mendapatkan endpoint dari halaman Informasi Dasar kluster.
RestClientBuilder builder = RestClient.builder(new HttpHost("{Endpoint of the Elasticsearch cluster}", 9200, "http"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
// Gunakan pembuat klien REST tingkat rendah untuk membuat instance RestHighLevelClient.
RestHighLevelClient highClient = new RestHighLevelClient(builder);
try {
// Buat permintaan.
Map<String, Object> jsonMap = new HashMap<>();
// field_01 dan field_02 adalah nama bidang, dan value_01 dan value_02 adalah nilai dari field_01 dan field_02.
jsonMap.put("{field_01}", "{value_01}");
jsonMap.put("{field_02}", "{value_02}");
// index_name adalah nama indeks, type_name adalah nama tipe, dan doc_id adalah ID dokumen.
IndexRequest indexRequest = new IndexRequest("{index_name}", "{type_name}", "{doc_id}").source(jsonMap);
// Jalankan kode berikut secara paralel.
IndexResponse indexResponse = highClient.index(indexRequest);
long version = indexResponse.getVersion();
System.out.println("Indeks dokumen berhasil dibuat! " + version);
// index_name adalah nama indeks, type_name adalah nama tipe, dan doc_id adalah ID dokumen. Nama indeks, nama tipe, dan ID dokumen sama dengan yang Anda tentukan saat membuat indeks.
DeleteRequest request = new DeleteRequest("{index_name}", "{type_name}", "{doc_id}");
DeleteResponse deleteResponse = highClient.delete(request);
System.out.println("Dokumen berhasil dihapus!");
highClient.close();
} catch (IOException ioException) {
// Tangani pengecualian.
}
}
}Ganti parameter yang diapit oleh tanda kurung kurawal {} dalam kode sampel di atas dengan parameter spesifik layanan. Untuk informasi lebih lanjut, lihat komentar kode.
Untuk informasi lebih lanjut tentang fitur Klien REST Tingkat Tinggi Java, lihat dokumentasi resmi Klien REST Tingkat Tinggi Java.