Konfigurasikan variabel lingkungan
Bagian ini menjelaskan cara mengonfigurasi variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET di sistem operasi Anda.
Pasangan AccessKey akun Alibaba Cloud dapat digunakan untuk mengakses semua Operasi API. Kami menyarankan Anda menggunakan pasangan AccessKey Pengguna Resource Access Management (RAM) untuk memanggil Operasi API atau melakukan pemeliharaan rutin. Untuk informasi lebih lanjut, lihat Buat Pengguna RAM.
Untuk informasi lebih lanjut tentang cara membuat pasangan AccessKey, lihat Buat Pasangan AccessKey.
Jika Anda menggunakan pasangan AccessKey pengguna RAM, pastikan akun Alibaba Cloud telah memberikan izin yang ditentukan dalam peran terkait layanan AliyunServiceRoleForOpenSearch kepada pengguna RAM. Untuk informasi lebih lanjut, lihat AliyunServiceRoleForOpenSearch dan Aturan Otorisasi Akses.
Kami menyarankan agar Anda tidak menuliskan langsung ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di akun Anda akan terganggu.
Linux dan macOS:
Dalam perintah berikut, ganti
<access_key_id>dengan ID AccessKey pengguna RAM Anda dan<access_key_secret>dengan Rahasia AccessKey pengguna RAM Anda, lalu jalankan perintah tersebut.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 tentukan ID AccessKey Anda untuk ALIBABA_CLOUD_ACCESS_KEY_ID dan Rahasia AccessKey Anda untuk ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Mulai ulang Windows agar pasangan AccessKey berlaku.
Kode demo untuk mengirim data menggunakan OpenSearch SDK for Java V3.1
Untuk mengunggah data dalam mode commit, Anda dapat melakukan operasi berikut: Enkapsulasi dinamis data dokumen yang akan diunggah ke objek Map, panggil metode add untuk mengunggah objek Map ke buffer klien, lalu 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 ke mana Anda ingin mengirim data";
private static String tableName = "Nama tabel ke mana Anda ingin mengirim data";
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 ini. Untuk informasi lebih lanjut, lihat bagian "Konfigurasikan variabel lingkungan" topik ini.
String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Lihat dokumen 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"; // String ini disandikan dalam 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 unggah 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 mengirim data.
DocumentClient documentClient1 = new DocumentClient(serviceClient1);
// Panggil metode untuk mengunggah doc1 ke buffer klien dan atur sebagai dokumen baru.
documentClient1.add(doc1);
// Tampilkan dokumen.
System.out.println(doc1.toString());
try {
// Panggil metode commit untuk mengirimkan dokumen yang diunggah. Dalam contoh ini, 10 detik disediakan untuk operasi pengiriman selesai. Anda juga dapat mengunggah beberapa dokumen ke buffer klien lalu mengirim dokumen tersebut sekaligus.
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// Apakah data dikirimkan bergantung pada apakah terjadi kesalahan saat Anda mengirim data dan apakah terjadi kesalahan di konsol OpenSearch.
// Setelah Anda mengirim 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 ditambahkan 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 doc2 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 dengan 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 sekaligus dan Anda dapat melihat hasilnya setelah 10 detik. Anda juga dapat memperbarui beberapa dokumen di buffer klien lalu mengirim dokumen tersebut sekaligus.
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// Apakah data dikirimkan bergantung pada apakah terjadi kesalahan saat Anda mengirim data dan apakah terjadi kesalahan di konsol OpenSearch.
// Setelah Anda mengirim 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, 10 detik disediakan untuk operasi pengiriman selesai. Anda juga dapat menghapus beberapa dokumen dari buffer klien lalu mengirim dokumen yang dihapus sekaligus.
OpenSearchResult osr = documentClient1.commit(appName, tableName);
// Apakah data dikirimkan bergantung pada apakah terjadi kesalahan saat Anda mengirim data dan apakah terjadi kesalahan di konsol OpenSearch.
// Setelah Anda mengirim 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 memeriksa apakah dokumen telah dihapus. Jika Anda tidak menghibernasi thread dan segera meminta data setelah penghapusan, data yang akan dihapus mungkin termasuk 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 untuk mengonfigurasi parameter klausa config, 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 kueri 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 kueri:" + obj.toString());
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
}
}Anda hanya dapat mengirim data ke bidang dalam tabel yang sama tetapi tidak dapat mengirim data lintas tabel.