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
Instal Java Low Level REST Client. Untuk proyek Maven, tambahkan dependensi berikut ke bagian
dependenciespada filepom.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>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.
PentingJika 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
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}