全部产品
Search
文档中心

Lindorm:Java Low Level REST Client

更新时间:Feb 03, 2026

Java Low Level REST Client adalah klien REST dasar yang disediakan oleh Elasticsearch. Operasi API-nya tidak mengkodekan atau mendekode data. LindormSearch kompatibel dengan Elasticsearch 7.10 dan versi sebelumnya. Untuk menyesuaikan permintaan dan respons saat terhubung ke LindormSearch, Anda dapat menggunakan Java Low Level REST Client.

Prasyarat

  • Lingkungan Java dengan JDK 1.8 atau versi yang lebih baru harus diinstal.

  • LindormSearch telah diaktifkan untuk instans Lindorm Anda. Untuk informasi selengkapnya, lihat Panduan Aktivasi.

  • Alamat IP klien Anda telah ditambahkan ke daftar putih instance Lindorm. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih.

Prosedur

  1. Instal Java Low Level REST Client. Untuk proyek Maven, tambahkan dependensi berikut ke bagian dependencies pada file pom.xml:

    <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>
  2. Konfigurasikan parameter koneksi.

    // Tentukan titik akhir LindormSearch untuk Elasticsearch.
    String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
    int search_port = 30070;
    
    // Tentukan nama pengguna dan kata sandi yang digunakan untuk terhubung ke LindormSearch.
    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

    Parameter

    Deskripsi

    search_url

    LindormSearch endpoint for Elasticsearch. Untuk informasi lebih lanjut tentang cara memperoleh titik akhir, lihat Lihat titik akhir.

    Penting
    • Jika aplikasi Anda diterapkan pada instance ECS, kami sarankan Anda menggunakan VPC untuk terhubung ke instance Lindorm guna memastikan keamanan yang lebih tinggi dan latensi jaringan yang lebih rendah.

    • Jika aplikasi Anda dideploy secara lokal dan terhubung ke instans Lindorm melalui jaringan publik, Anda harus terlebih dahulu mengaktifkan titik akhir publik di Konsol. Di panel navigasi sebelah kiri, klik Database Connections. Klik tab Search Engine, lalu klik Enable Public Endpoint di pojok kanan atas.

    • Untuk koneksi melalui VPC, atur search_url ke titik akhir VPC. Untuk koneksi melalui jaringan publik, atur search_url ke titik akhir Internet.

    search_port

    Port yang digunakan untuk mengakses LindormSearch endpoint for Elasticsearch. Nilai parameter ini tetap yaitu 30070.

    username

    Username dan password untuk mengakses mesin pencari.

    Untuk mendapatkan username dan password default, buka Konsol. Di panel navigasi sebelah kiri, klik Database Connections. Anda dapat menemukan kredensial tersebut di tab Search Engine.

    password

  3. Anda dapat mengakses mesin pencari dengan objek Java Low Level REST Client.

    Kode contoh mencakup bagian-bagian berikut:

    • Buat indeks pencarian: Indeks pencarian bernama lindorm_index dibuat.

    • Penulisan data: Menulis 5.000 dokumen dalam satu batch.

    • Kueri data: Kirim permintaan refresh untuk menampilkan data yang ditulis ke LindormSearch. Dalam kode sampel, dua permintaan dikirim untuk masing-masing mengkueri semua dokumen dalam indeks dan dokumen dengan ID tertentu dalam indeks.

    • Hapus data: Hapus dokumen yang ID-nya test dan hapus indeks lindorm_index.

    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 beberapa dokumen ke LindormSearch secara batch.
      Random random = new Random();
      Request bulkRequest = new Request("POST", "/_bulk");
      StringBuilder bulkJsonBuilder = new StringBuilder();
      for (int i = 0; i < 5000; i++) {
        // Ganti bidang dan nilai dalam kode dengan yang sebenarnya dalam bisnis 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);
    
      // Kirim permintaan refresh untuk menampilkan data yang ditulis ke LindormSearch.
      response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
      // Kueri semua data dalam indeks. Secara default, hingga 10 hasil dikembalikan.
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
      // Kueri dokumen yang ID-nya 0 dalam indeks.
      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());
    }

Contoh lengkap

Kode contoh lengkap adalah sebagai berikut:

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.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;

import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;

import java.util.Random;

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

    // Tentukan nama pengguna dan kata sandi yang digunakan untuk terhubung ke LindormSearch.
    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 beberapa dokumen ke LindormSearch secara batch.
      Random random = new Random();
      Request bulkRequest = new Request("POST", "/_bulk");
      StringBuilder bulkJsonBuilder = new StringBuilder();
      for (int i = 0; i < 5000; i++) {
        // Ganti bidang dan nilai dalam kode dengan yang sebenarnya dalam bisnis 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);

      // Kirim permintaan refresh untuk menampilkan data yang ditulis ke LindormSearch.
      response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

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

      // Kueri dokumen yang ID-nya 0 dalam indeks.
      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());
    }
  }
}

Hasil berikut dikembalikan:

responseBody = {"acknowledged":true,"shards_acknowledged":true,"index":"lindorm_index"}
responseBody = {"_shards":{"total":1,"successful":1,"failed":0}}
responseBody = {"took":6,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":5000,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"lindorm_index","_id":"0","_score":1.0,"_source":{"field1":"2127821774","field2":"2127821774"}},{"_index":"lindorm_index","_id":"1","_score":1.0,"_source":{"field1":"1820331840","field2":"1820331840"}},{"_index":"lindorm_index","_id":"2","_score":1.0,"_source":{"field1":"-388903172","field2":"-388903172"}},{"_index":"lindorm_index","_id":"3","_score":1.0,"_source":{"field1":"-68048869","field2":"-68048869"}},{"_index":"lindorm_index","_id":"4","_score":1.0,"_source":{"field1":"1865955199","field2":"1865955199"}},{"_index":"lindorm_index","_id":"5","_score":1.0,"_source":{"field1":"1088273523","field2":"1088273523"}},{"_index":"lindorm_index","_id":"6","_score":1.0,"_source":{"field1":"-1529281106","field2":"-1529281106"}},{"_index":"lindorm_index","_id":"7","_score":1.0,"_source":{"field1":"-1185412160","field2":"-1185412160"}},{"_index":"lindorm_index","_id":"8","_score":1.0,"_source":{"field1":"-1243760053","field2":"-1243760053"}},{"_index":"lindorm_index","_id":"9","_score":1.0,"_source":{"field1":"1066058716","field2":"1066058716"}}]}}
responseBody = {"_index":"lindorm_index","_id":"0","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"field1":"2127821774","field2":"2127821774"}}
responseBody = {"acknowledged":true}