Konfigurasikan variabel lingkungan
Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Pasangan AccessKey dari akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Kami menyarankan Anda menggunakan pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan pemeliharaan rutin. Untuk informasi tentang cara menggunakan pengguna RAM, lihat Buat Pengguna RAM.
Untuk informasi tentang cara membuat pasangan AccessKey, lihat Buat Pasangan AccessKey.
Jika Anda menggunakan pasangan AccessKey dari pengguna RAM, pastikan bahwa izin yang diperlukan diberikan kepada peran AliyunServiceRoleForOpenSearch dengan menggunakan akun Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat AliyunServiceRoleForOpenSearch dan Aturan Otorisasi Akses.
Kami menyarankan agar Anda tidak menyertakan pasangan AccessKey Anda dalam materi yang mudah diakses oleh orang lain, seperti kode proyek. Jika tidak, pasangan AccessKey Anda mungkin bocor dan sumber daya di akun Anda menjadi tidak aman.
Linux dan macOS
Jalankan perintah berikut. Ganti
<access_key_id>dan<access_key_secret>dengan ID AccessKey dan Rahasia AccessKey dari pengguna RAM yang Anda gunakan.export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>Windows
Buat file variabel lingkungan, tambahkan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET ke file tersebut, lalu atur variabel lingkungan ke ID AccessKey dan Rahasia AccessKey Anda.
Mulai ulang Windows agar pasangan AccessKey berlaku.
Kode demo untuk mengirimkan data menggunakan OpenSearch SDK for Java V3.1
Untuk mengunggah data dalam mode commit, Anda harus terlebih dahulu mengenkapsulasi data dokumen yang akan diunggah secara dinamis ke dalam objek Map. Kemudian, panggil metode add untuk mengunggah objek Map ke buffer klien. Terakhir, panggil metode commit untuk mengirimkan objek Map.
Skenario
Gabungkan dan kirimkan data secara dinamis
Kirimkan satu dokumen
Kirimkan sejumlah kecil dokumen sekaligus
package com.aliyun.opensearch;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Maps;
import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
import com.aliyun.opensearch.sdk.generated.search.Config;
import com.aliyun.opensearch.sdk.generated.search.SearchFormat;
import com.aliyun.opensearch.sdk.generated.search.SearchParams;
import com.aliyun.opensearch.sdk.generated.search.general.SearchResult;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Random;
public class testCommitSearch {
private static String appName = "Nama aplikasi OpenSearch tempat Anda ingin mengirimkan data";
private static String tableName = "Nama tabel tempat data akan diunggah";
private static String host = "Endpoint API OpenSearch di wilayah Anda";
public static void main(String[] args) {
// Tentukan pasangan AccessKey Anda.
// Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
// Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode contoh ini. Untuk informasi lebih lanjut, lihat bagian "Konfigurasikan variabel lingkungan" dari topik ini.
String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Dapatkan format penyandian file dan format penyandian default.
System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));
// Hasilkan nilai acak dan gunakan nilai tersebut sebagai nilai kunci utama.
Random rand = new Random();
int value = rand.nextInt(Integer.MAX_VALUE);
// Buat objek Map bernama doc1 untuk menyimpan data dokumen yang akan diunggah.
Map<String, Object> doc1 = Maps.newLinkedHashMap();
doc1.put("id", value);
String title_string = "Unggah doc1 dalam mode commit";// UTF-8
byte[] bytes;
try {
bytes = title_string.getBytes("utf-8");
String utf8_string = new String(bytes, "utf-8");
doc1.put("name", utf8_string);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
doc1.put("phone", "1381111****");
int[] int_arr = {33,44};
doc1.put("int_arr", int_arr);
String[] literal_arr = {"Unggah doc1 dalam mode commit","Tes pengunggahan doc1 dalam mode commit"};
doc1.put("literal_arr", literal_arr);
float[] float_arr = {(float)1.1,(float)1.2};
doc1.put("float_arr", float_arr);
doc1.put("cate_id", 1);
// Buat objek OpenSearch.
OpenSearch openSearch1 = new OpenSearch(accesskey, secret, host);
// Gunakan objek OpenSearch sebagai parameter untuk membuat objek OpenSearchClient.
OpenSearchClient serviceClient1 = new OpenSearchClient(openSearch1);
// Buat objek DocumentClient yang digunakan untuk mengunggah dan mengirimkan data.
DocumentClient documentClient1 = new DocumentClient(serviceClient1);
// Panggil metode add untuk mengunggah dokumen ke buffer klien.
documentClient1.add(doc1);
// Tampilkan dokumen.
System.out.println(doc1.toString());
try {
// Panggil metode commit untuk mengirimkan dokumen yang ditambahkan. Dalam contoh ini, hanya satu dokumen yang dikirimkan pada satu waktu dan Anda dapat melihat hasilnya setelah 10 detik. Anda juga dapat mengunggah beberapa dokumen ke buffer klien dan kemudian mengirimkan dokumen tersebut sekaligus.
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// Apakah data dikirimkan tergantung pada apakah terjadi kesalahan saat Anda mengirimkan data dan apakah terjadi kesalahan di konsol OpenSearch.
// Setelah Anda mengirimkan data, kesalahan mungkin terjadi di aplikasi. Konsol OpenSearch mencatat kesalahan ini dalam log kesalahan, seperti kegagalan konversi konten bidang.
if(osr.getResult().equalsIgnoreCase("true")){
System.out.println("Tidak ada kesalahan yang terjadi saat data dikirimkan! \n ID permintaan adalah "+osr.getTraceInfo().getRequestId());
}else{
System.out.println("Kesalahan terjadi saat data dikirimkan!" + osr.getTraceInfo());
}
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
try {
Thread.sleep(10000); // Hibernasi thread selama 10 detik, setelah itu Anda dapat melihat data baru di konsol OpenSearch.
} catch (InterruptedException e) {
e.printStackTrace();
}
// Buat objek Map bernama doc2 untuk memperbarui doc1. Panggil metode add untuk melakukan pembaruan ini dan pastikan Anda menentukan nama dan nilai kunci utama yang valid dari doc1.
Map<String, Object> doc2 = Maps.newLinkedHashMap();
doc2.put("id", value);
String title_string2 = "Perbarui doc1 dalam mode commit";// UTF-8
byte[] bytes2;
try {
bytes2 = title_string2.getBytes("utf-8");
String utf8_string2 = new String(bytes2, "utf-8");
doc2.put("name", utf8_string2);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
doc2.put("phone", "1390000****");
int[] int_arr2 = {22,22};
doc2.put("int_arr", int_arr2);
String[] literal_arr2 = {"Perbarui doc1 dalam mode commit","Perbarui doc1 dalam mode commit"};
doc2.put("literal_arr", literal_arr2);
float[] float_arr2 = {(float)1.1,(float)1.2};
doc2.put("float_arr", float_arr2);
doc2.put("cate_id", 1);
// Panggil metode add untuk mengunggah objek Map doc2 ke buffer klien. Operasi pembaruan ini dapat dieksekusi secara normal, karena kunci utama valid.
documentClient1.update(doc2);
// Tampilkan dokumen.
System.out.println(doc2.toString());
try {
// Panggil metode commit untuk mengirimkan dokumen yang diperbarui. Dalam contoh ini, hanya satu dokumen yang dikirimkan pada satu waktu dan Anda dapat melihat hasilnya setelah 10 detik. Anda juga dapat memperbarui beberapa dokumen di buffer klien dan kemudian mengirimkan dokumen tersebut sekaligus.
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// Apakah data dikirimkan tergantung pada apakah terjadi kesalahan saat Anda mengirimkan data dan apakah terjadi kesalahan di konsol OpenSearch.
// Setelah Anda mengirimkan data, kesalahan mungkin terjadi di aplikasi. Konsol OpenSearch mencatat kesalahan ini dalam log kesalahan, seperti kegagalan konversi konten bidang.
if(osr.getResult().equalsIgnoreCase("true")){
System.out.println("Tidak ada kesalahan yang terjadi saat data dikirimkan! \n ID permintaan adalah "+osr.getTraceInfo().getRequestId());
}else{
System.out.println("Kesalahan terjadi saat data dikirimkan!" + osr.getTraceInfo());
}
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
try {
Thread.sleep(10000);// Hibernasi thread selama 10 detik, setelah itu Anda dapat melihat data yang diperbarui di konsol OpenSearch.
} catch (InterruptedException e) {
e.printStackTrace();
}
// Buat objek Map bernama doc3 untuk menghapus dokumen. Untuk menghapus dokumen, Anda hanya perlu menentukan nilai kunci utama dokumen.
Map<String, Object> doc3 = Maps.newLinkedHashMap();
doc3.put("id", value);
// Unggah objek Map doc3 ke buffer klien untuk menghapus dokumen.
documentClient1.remove(doc3);
// Tampilkan dokumen.
System.out.println(doc3.toString());
try {
// Panggil metode commit untuk mengirimkan dokumen yang dihapus. Dalam contoh ini, hanya satu dokumen yang dikirimkan pada satu waktu dan Anda dapat melihat hasilnya setelah 10 detik. Anda juga dapat menghapus beberapa dokumen dari buffer klien dan kemudian mengirimkan dokumen yang dihapus sekaligus.
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// Apakah data dikirimkan tergantung pada apakah terjadi kesalahan saat Anda mengirimkan data dan apakah terjadi kesalahan di konsol OpenSearch.
// Setelah Anda mengirimkan data, kesalahan mungkin terjadi di aplikasi. Konsol OpenSearch mencatat kesalahan ini dalam log kesalahan, seperti kegagalan konversi konten bidang.
if(osr.getResult().equalsIgnoreCase("true")){
System.out.println("Tidak ada kesalahan yang terjadi saat data dikirimkan! \n ID permintaan adalah "+osr.getTraceInfo().getRequestId());
}else{
System.out.println("Kesalahan terjadi saat data dikirimkan!" + osr.getTraceInfo());
}
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
try {
Thread.sleep(10000); // Hibernasi thread selama 10 detik, setelah itu Anda dapat memeriksa apakah dokumen telah dihapus. Jika Anda tidak menghibernasi thread dan segera meminta data setelah penghapusan, data yang akan dihapus mungkin dikembalikan dalam hasil pencarian. Hibernasi thread setidaknya selama satu detik.
} catch (InterruptedException e) {
e.printStackTrace();
}
// Buat objek OpenSearch.
OpenSearch openSearch2 = new OpenSearch(accesskey, secret, host);
// Gunakan objek OpenSearch sebagai parameter untuk membuat objek OpenSearchClient.
OpenSearchClient serviceClient2 = new OpenSearchClient(openSearch2);
// Gunakan objek OpenSearchClient sebagai parameter untuk membuat objek SearcherClient.
SearcherClient searcherClient2 = new SearcherClient(serviceClient2);
// Buat objek Config dan gunakan klausa config untuk mengonfigurasi parameter seperti parameter terkait paging dan format data hasil yang dikembalikan.
Config config = new Config(Lists.newArrayList(appName));
config.setStart(0);
config.setHits(30);
// Tentukan format data hasil yang dikembalikan. Format yang didukung adalah XML dan JSON. Format FULLJSON tidak didukung. Dalam contoh ini, format data diatur ke JSON.
config.setSearchFormat(SearchFormat.JSON);
SearchParams searchParams = new SearchParams(config);
searchParams.setQuery("id:'" + value + "'");
// Jalankan query dan kembalikan hasilnya.
SearchResult searchResult;
try {
searchResult = searcherClient2.execute(searchParams);
String result = searchResult.getResult();
JSONObject obj = new JSONObject(result);
// Tampilkan hasil pencarian.
System.out.println("Hasil debugging query:" + obj.toString());
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
}
}Saat Anda mengirimkan data, Anda hanya dapat mengirimkan bidang dalam tabel yang sama dan tidak dapat mengirimkan bidang dalam tabel yang berbeda.