Java High Level REST Client 6.7.x memungkinkan Anda memanggil API Elasticsearch dari aplikasi Java. Panduan ini akan memandu Anda melalui proses penyiapan klien serta menjalankan operasi indeks dan dokumen terhadap kluster Alibaba Cloud Elasticsearch.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
JDK 1.8 atau versi yang lebih baru. Lihat Instal JDK.
Kluster Alibaba Cloud Elasticsearch versi 6.7.0 atau lebih baru. Lihat Buat kluster Alibaba Cloud Elasticsearch.
Auto Indexing diaktifkan pada kluster. Lihat Konfigurasi file YML. Jika Auto Indexing tidak diaktifkan, muncul error berikut:

Proyek Java Maven.
Java High Level REST Client kompatibel ke depan. Misalnya, klien versi 6.7.0 dapat digunakan dengan kluster Elasticsearch versi 6.7.0 atau lebih baru. Untuk menggunakan fitur terbaru klien, sesuaikan versi klien dengan versi kluster Anda.
Akses jaringan
Konfigurasikan daftar putih alamat IP kluster agar klien dapat mengaksesnya:
Jaringan publik: Jika server Anda berada di internet publik, aktifkan Public Network Access untuk kluster dan tambahkan alamat IP publik server ke daftar putih alamat IP publik. Lihat Konfigurasi daftar putih alamat IP publik atau pribadi untuk kluster Elasticsearch.
PentingJika klien berada di balik jaringan rumah atau LAN kantor, tambahkan alamat IP egress internet, bukan alamat IP pribadi klien.
Menambahkan
0.0.0.0/0mengizinkan semua alamat IPv4 dan menimbulkan risiko keamanan. Evaluasi risiko tersebut sebelum menggunakan pengaturan ini.Daftar putih yang tidak ada atau salah konfigurasi menyebabkan error "Timeout connecting".
Untuk mengakses Kibana dari klien, konfigurasikan daftar putih alamat IP terpisah untuk Kibana. Lihat Konfigurasi daftar putih alamat IP publik atau pribadi untuk Kibana.
VPC (virtual private cloud): Jika server Anda berada dalam VPC yang sama dengan kluster, gunakan titik akhir pribadi kluster. Secara default,
0.0.0.0/0sudah ditambahkan ke daftar putih alamat IP pribadi.
Tambahkan dependensi POM
Tambahkan dependensi berikut ke file pom.xml proyek Maven Anda:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.7.0</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>Kerentanan eksekusi kode remote (RCE) mungkin ada di Apache Log4j. Lihat Pemberitahuan kerentanan | Kerentanan RCE pada Apache Log4j 2.
Konfigurasi RequestOptions
Java REST Client 6.7.0 memperkenalkan RequestOptions berdasarkan Java REST Client 6.3.2, yang memungkinkan Anda mengatur opsi per permintaan tanpa memengaruhi pemrosesan permintaan. Di lingkungan Java Virtual Machine (JVM) dengan memori terbatas, gunakan RequestOptions untuk membatasi ukuran cache respons asinkron:
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();
}Teruskan COMMON_OPTIONS saat mengeksekusi permintaan:
IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);Untuk referensi lengkap API RequestOptions, lihat Referensi RequestOptions Elasticsearch.
Contoh
Unduh kode contoh lengkap.
Contoh berikut membuat RestHighLevelClient, mengindeks dokumen, lalu menghapusnya. Contoh ini menggunakan COMMON_OPTIONS untuk membatasi ukuran cache respons asinkron menjadi 30 MiB.
Ganti setiap placeholder yang diapit oleh {} dengan nilai aktual Anda. Lihat komentar inline untuk detailnya.
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) {
// Konfigurasikan otentikasi akses dasar menggunakan kredensial kluster.
// Gunakan username dan password yang ditetapkan saat Anda membuat kluster.
// Kredensial yang sama digunakan untuk masuk ke Konsol Kibana.
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("{Username}", "{Password}"));
// Bangun klien. Dapatkan titik akhir kluster dari halaman Informasi Dasar.
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);
}
});
// Buat klien tingkat tinggi dari builder klien tingkat rendah.
RestHighLevelClient highClient = new RestHighLevelClient(builder);
try {
// Bangun permintaan indeks.
// field_01 dan field_02 adalah nama bidang; value_01 dan value_02 adalah nilainya.
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("{field_01}", "{value_01}");
jsonMap.put("{field_02}", "{value_02}");
// index_name: nama indeks. type_name: nama tipe. doc_id: ID dokumen.
IndexRequest indexRequest =
new IndexRequest("{index_name}", "{type_name}", "{doc_id}").source(jsonMap);
// Indeks dokumen menggunakan RequestOptions kustom.
IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);
long version = indexResponse.getVersion();
System.out.println("Dokumen berhasil diindeks! " + version);
// Hapus dokumen. Gunakan nama indeks, nama tipe, dan ID dokumen yang sama.
DeleteRequest request =
new DeleteRequest("{index_name}", "{type_name}", "{doc_id}");
DeleteResponse deleteResponse = highClient.delete(request, COMMON_OPTIONS);
System.out.println("Dokumen berhasil dihapus! \n"
+ deleteResponse.toString() + "\n" + deleteResponse.status());
highClient.close();
} catch (IOException ioException) {
// Tangani exception.
}
}
}Langkah selanjutnya
Untuk referensi API lengkap Java High Level REST Client, lihat dokumentasi resmi Java High Level REST Client Elasticsearch.