All Products
Search
Document Center

Lindorm:Java low level REST client

Last Updated:Sep 15, 2026

Java Low Level REST Client mengirim permintaan HTTP mentah tanpa mengenkripsi atau mendekripsi isi permintaan atau respons, sehingga memberikan kendali penuh atas penanganan permintaan. Gunakan klien ini saat Anda perlu terhubung ke LindormSearch (kompatibel dengan Elasticsearch 7.10 dan versi sebelumnya) dan ingin mengelola serialisasi secara mandiri.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Menginstal JDK 1.8 atau versi yang lebih baru.

  • Mengaktifkan LindormSearch untuk instans Lindorm Anda. Lihat Panduan aktivasi.

  • Menambahkan alamat IP klien Anda ke daftar putih instans Lindorm. Lihat Konfigurasi daftar putih.

Instal klien

Tambahkan dependensi berikut ke bagian dependencies pada file pom.xml atau file build Anda.

Maven:

<dependency>
  <groupId>org.elasticsearch.client</groupId>
  <artifactId>elasticsearch-rest-client</artifactId>
  <version>7.10.0</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.8.2</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.7</version>
</dependency>

Gradle:

dependencies {
  implementation 'org.elasticsearch.client:elasticsearch-rest-client:7.10.0'
  implementation 'org.apache.logging.log4j:log4j-core:2.8.2'
  implementation 'org.apache.logging.log4j:log4j-api:2.7'
}

Konfigurasi koneksi

Buat RestClient dengan titik akhir LindormSearch dan kredensial:

String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
int search_port = 30070;

// Hanya untuk tujuan demo. Jangan hardcode kredensial di kode produksi.
String username = "user";
String password = "test";

final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(search_url, search_port));
restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
  @Override
  public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
  }
});

Parameter:

ParameterDeskripsi
search_urlTitik akhir LindormSearch untuk Elasticsearch. Untuk mendapatkan titik akhir tersebut, lihat Lihat titik akhir. Gunakan titik akhir Virtual Private Cloud (VPC) untuk aplikasi yang berjalan pada instans ECS, atau titik akhir Internet untuk aplikasi lokal yang terhubung melalui jaringan publik.
search_portPort untuk titik akhir LindormSearch. Nilai tetap: 30070.
usernameUsername untuk mesin pencari. Untuk mendapatkan kredensial default, buka Konsol Lindorm, klik Database Connections di panel navigasi kiri, lalu klik tab Search Engine.
passwordPassword untuk mesin pencari. Ditemukan di lokasi yang sama dengan username.
Penting

Gunakan koneksi VPC untuk aplikasi yang dideploy pada instans ECS — koneksi ini memberikan latensi lebih rendah dan keamanan lebih baik dibandingkan koneksi jaringan publik. Untuk terhubung melalui jaringan publik, aktifkan terlebih dahulu titik akhir publik: di Konsol Lindorm, klik Database Connections di panel navigasi kiri, klik tab Search Engine, lalu klik Enable Public Endpoint di pojok kanan atas.

Buat indeks

try (RestClient restClient = restClientBuilder.build()) {
  String indexName = "lindorm_index";

  Request indexRequest = new Request("PUT", "/" + indexName);
  indexRequest.setJsonEntity("{" +
    "  \"settings\":{" +
    "    \"index.number_of_shards\": 1" +
    "  }," +
    "  \"mappings\":{" +
    "    \"properties\":{" +
    "      \"name\":{" +
    "        \"type\":\"text\"" +
    "      }" +
    "    }" +
    "  }" +
    "}");
  Response response = restClient.performRequest(indexRequest);
  String responseBody = EntityUtils.toString(response.getEntity());
  System.out.println("responseBody = " + responseBody);
}

Respons sukses akan tampak seperti ini:

{"acknowledged":true,"shards_acknowledged":true,"index":"lindorm_index"}

Tulis dokumen secara batch

Gunakan Bulk API untuk menulis beberapa dokumen dalam satu permintaan. Contoh berikut menulis 5.000 dokumen ke lindorm_index:

Random random = new Random();
Request bulkRequest = new Request("POST", "/_bulk");
StringBuilder bulkJsonBuilder = new StringBuilder();
for (int i = 0; i < 5000; i++) {
  // Ganti nama dan nilai bidang dengan yang berasal dari aplikasi Anda.
  bulkJsonBuilder.append("{\"index\":{\"_index\":\"").append(indexName).append("\",\"_id\":\"").append(i).append("\"}}").append("\n");
  String value = random.nextInt() + "";
  bulkJsonBuilder.append("{\"field1\":\"").append(value).append("\",\"field2\":\"").append(value).append("\"}").append("\n");
}
bulkRequest.setJsonEntity(bulkJsonBuilder.toString());
response = restClient.performRequest(bulkRequest);

Setelah penulisan batch, kirim permintaan refresh agar dokumen tersebut dapat dilihat dalam pencarian:

response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

Respons refresh yang sukses akan tampak seperti ini:

{"_shards":{"total":1,"successful":1,"failed":0}}

Kueri dokumen

Kueri semua dokumen dalam indeks (secara default mengembalikan hingga 10 hasil):

response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

Kueri dokumen berdasarkan ID:

response = restClient.performRequest(new Request("GET", "/" + indexName + "/_doc/0"));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

Respons kueri berdasarkan ID yang sukses akan tampak seperti ini:

{"_index":"lindorm_index","_id":"0","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"field1":"2127821774","field2":"2127821774"}}

Hapus indeks

response = restClient.performRequest(new Request("DELETE", "/" + indexName));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

Respons penghapusan yang sukses akan tampak seperti ini:

{"acknowledged":true}

Contoh lengkap

Berikut adalah program contoh lengkap yang menggabungkan semua operasi di atas:

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.apache.http.util.EntityUtils;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;

import java.util.Random;

public class RestLClientTest {
  public static void main(String[] args) {
    String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
    int search_port = 30070;

    // Hanya untuk tujuan demo. Jangan hardcode kredensial di kode produksi.
    String username = "user";
    String password = "test";

    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
    RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(search_url, search_port));
    restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
      @Override
      public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
      }
    });

    try (RestClient restClient = restClientBuilder.build()) {
      String indexName = "lindorm_index";

      // Buat indeks pencarian.
      Request indexRequest = new Request("PUT", "/" + indexName);
      indexRequest.setJsonEntity("{" +
        "  \"settings\":{" +
        "    \"index.number_of_shards\": 1" +
        "  }," +
        "  \"mappings\":{" +
        "    \"properties\":{" +
        "      \"name\":{" +
        "        \"type\":\"text\"" +
        "      }" +
        "    }" +
        "  }" +
        "}");
      Response response = restClient.performRequest(indexRequest);
      String responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Tulis 5.000 dokumen dalam satu batch.
      Random random = new Random();
      Request bulkRequest = new Request("POST", "/_bulk");
      StringBuilder bulkJsonBuilder = new StringBuilder();
      for (int i = 0; i < 5000; i++) {
        // Ganti nama dan nilai bidang dengan yang berasal dari aplikasi Anda.
        bulkJsonBuilder.append("{\"index\":{\"_index\":\"").append(indexName).append("\",\"_id\":\"").append(i).append("\"}}").append("\n");
        String value = random.nextInt() + "";
        bulkJsonBuilder.append("{\"field1\":\"").append(value).append("\",\"field2\":\"").append(value).append("\"}").append("\n");
      }
      bulkRequest.setJsonEntity(bulkJsonBuilder.toString());
      response = restClient.performRequest(bulkRequest);

      // Refresh indeks agar dokumen yang ditulis menjadi terlihat.
      response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Kueri semua dokumen dalam indeks (secara default mengembalikan hingga 10).
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Kueri dokumen dengan ID 0.
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_doc/0"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Hapus indeks.
      response = restClient.performRequest(new Request("DELETE", "/" + indexName));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

    } catch (Exception e) {
      System.out.println("msg: " + e.getMessage());
    }
  }
}