Topik ini menjelaskan variabel lingkungan yang diperlukan untuk pencarian dokumen menggunakan Java SDK dan menyediakan contoh kode.
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 O&M 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 izin yang diperlukan telah diberikan ke role AliyunServiceRoleForOpenSearch oleh akun Alibaba Cloud Anda. Untuk informasi selengkapnya, lihat AliyunServiceRoleForOpenSearch dan Aturan otorisasi akses.
Kami menyarankan agar Anda tidak menyertakan pasangan AccessKey dalam materi yang mudah diakses orang lain, seperti kode proyek. Jika tidak, pasangan AccessKey Anda berisiko bocor dan sumber daya dalam 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 dalam file tersebut, lalu atur nilainya sesuai dengan ID AccessKey dan Rahasia AccessKey Anda.
Mulai ulang Windows agar pasangan AccessKey berlaku.
Kode contoh untuk pencarian dokumen (SDK V4.0.0)
Penanganan error pencarian:
Tangani exception berdasarkan nilai bidang code dan message, bukan bidang status. Untuk informasi lebih lanjut tentang kode kesalahan, lihat Kode kesalahan.
Kode contoh:
package com.aliyun.opensearch;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
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.search.*;
import com.aliyun.opensearch.sdk.generated.search.general.SearchResult;
import com.aliyun.opensearch.search.SearchParamsBuilder;
import com.aliyun.opensearch.search.SearchResultDebug;
import java.nio.charset.Charset;
public class testSearch {
private static String appName = "Ganti dengan nama aplikasi OpenSearch Anda";
private static String host = "Ganti dengan titik akhir API aplikasi Anda";
public static void main(String[] args) {
// Informasi identitas pengguna.
// Baca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode contoh ini.
String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Lihat file dan format encoding default.
System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));
// Buat dan bangun objek OpenSearch.
OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
// Buat objek OpenSearchClient dan gunakan objek OpenSearch sebagai parameter konstruktor.
OpenSearchClient serviceClient = new OpenSearchClient(openSearch);
// Buat objek SearcherClient dan gunakan objek OpenSearchClient sebagai parameter konstruktor.
SearcherClient searcherClient = new SearcherClient(serviceClient);
// Definisikan objek Config untuk mengatur parameter klausa config, seperti paging, format pengembalian data, dan nama aplikasi.
Config config = new Config(Lists.newArrayList(appName));
config.setStart(0);
config.setHits(5);
// Atur format pengembalian ke FULLJSON. Format yang didukung meliputi XML, JSON, dan FULLJSON.
config.setSearchFormat(SearchFormat.FULLJSON);
// Tentukan bidang yang akan dikembalikan dalam hasil pencarian.
config.setFetchFields(Lists.newArrayList("id", "name", "phone", "int_arr", "literal_arr", "float_arr", "cate_id"));
// Catatan: Parameter rerank_size dalam klausa config diatur dalam objek kelas Rank.
// Atur parameter untuk klausa kvpairs. Dalam contoh ini, plugin uniq ditambahkan ke klausa distinct untuk mengatasi masalah ketidakakuratan nilai total dan viewtotal saat reserved diatur ke false.
//config.setKvpairs("duniqfield:cate_id");
// Buat objek parameter.
SearchParams searchParams = new SearchParams(config);
// Atur klausa kueri. Untuk menggabungkan beberapa indeks dalam satu kueri, gabungkan dalam setQuery. Jika tidak, pemanggilan setQuery berikutnya akan menimpa yang sebelumnya.
searchParams.setQuery("name:'opensearch'");
// Atur klausa agregasi dan distinct.
Distinct dist = new Distinct();
dist.setKey("cate_id"); // Atur dist_key.
dist.setDistCount(1); // Atur dist_count.
dist.setDistTimes(1); // Atur dist_times.
dist.setReserved(false); // Atur reserved.
dist.setUpdateTotalHit(false); // Atur update_total_hit.
dist.setDistFilter("cate_id<=3"); // Atur kondisi filter.
dist.setGrade("1.2"); // Atur grade.
// Parameter duniqfield ditambahkan dengan menentukan klausa kvpairs dalam klausa config.
// Tambahkan parameter objek Distinct.
searchParams.addToDistincts(dist);
// Atur klausa agregasi.
Aggregate agg = new Aggregate();
agg.setGroupKey("cate_id"); // Atur group_key.
agg.setAggFun("count()"); // Atur agg_fun.
agg.setAggFilter("cate_id=1"); // Atur agg_filter.
agg.setRange("0~10"); // Atur statistik tersegmentasi.
agg.setAggSamplerThresHold("5"); // Atur ambang batas sampling.
agg.setAggSamplerStep("5"); // Atur ukuran langkah sampling.
agg.setMaxGroup("5"); // Atur jumlah maksimum grup yang dikembalikan.
// Tambahkan parameter objek Aggregate.
//searchParams.addToAggregates(agg);
// Contoh pengaturan beberapa bidang agregasi.
Set<Aggregate> Aggregates = new HashSet();
Aggregate aggregate1 = new Aggregate();
aggregate1.setGroupKey("cate_id");
aggregate1.setAggFun("count()");
Aggregates.add(aggregate1);
Aggregate aggregate2 = new Aggregate();
aggregate2.setGroupKey("cate_id_1");
aggregate2.setAggFun("count()");
Aggregates.add(aggregate2);
searchParams.setAggregates(Aggregates);
// Atur parameter biz.
Map hashMap = new HashMap();
hashMap.put("biz","type:web");
searchParams.setCustomParam(hashMap);
// Atur kondisi filter kueri.
// searchParams.setFilter("id > \"0\""); // Anda juga dapat menggunakan ParamsBuilder berikut untuk menambahkan kondisi filter.
// Atur kondisi sort.
Sort sorter = new Sort();
sorter.addToSortFields(new SortField("id", Order.DECREASE)); // Urutkan berdasarkan bidang id secara descending.
sorter.addToSortFields(new SortField("RANK", Order.INCREASE)); // Jika ID sama, urutkan berdasarkan RANK secara ascending.
// Contoh penggunaan tag_match dalam sort: (Kvpairs harus diatur dalam klausa config.)
//sorter.addToSortFields(new SortField("tag_match(\"kk1\",int_array,10,\"max\",\"false\",\"false\")", Order.INCREASE));
//config.setKvpairs("kk1:10");
// Tambahkan parameter objek Sort.
searchParams.setSort(sorter);
// Atur ekspresi pengurutan kasar dan presisi. Dalam contoh ini, diatur ke nilai default.
Rank rank = new Rank();
rank.setFirstRankName("default");
rank.setSecondRankName("default");
rank.setReRankSize(5);// Atur jumlah dokumen untuk pengurutan presisi.
// Tambahkan parameter objek Rank.
searchParams.setRank(rank);
// Atur parameter re_search untuk pencarian ulang.
// strategy:threshold,params:total_hits#10 => Di sini, strategy:threshold menunjukkan kebijakan. Saat ini hanya satu kebijakan yang didukung.
// Parameter untuk threshold adalah total_hits. Artinya, pencarian ulang dipicu jika total_hits dari permintaan pertama kurang dari nilai ini.
Map<String, String> reSearchParams = new HashMap<String, String>();
reSearchParams.put("re_search", "strategy:threshold,params:total_hits#10");
// Atur from_request_id untuk permintaan pencarian terkait.
reSearchParams.put("from_request_id", "159851481919726888064081");
//searchParams.setCustomParam(reSearchParams);
// Atur ringkasan hasil pencarian. Dalam contoh ini, objek SearchParamsBuilder digunakan untuk menambahkan ringkasan, yang lebih praktis.
Summary summ = new Summary("name");
summ.setSummary_field("name");// Bidang tempat ringkasan diterapkan. Bidang ini harus berupa bidang teks yang dapat ditokenisasi.
summ.setSummary_len("50");// Panjang cuplikan.
summ.setSummary_element("em"); // Tag HTML untuk sorotan.
summ.setSummary_ellipsis("...");// Elipsis untuk cuplikan.
summ.setSummary_snippet("1");// Jumlah cuplikan.
// Tambahkan parameter objek Summary.
//searchParams.addToSummaries(summ);
// Tambahkan parameter raw_query. Nilainya harus sama dengan kueri pencarian.
searchParams.setRawQuery("opensearch");
// Kelas utilitas untuk SearchParams yang menyediakan operasi lebih praktis.
SearchParamsBuilder paramsBuilder = SearchParamsBuilder.create(searchParams);
// Gunakan objek SearchParamsBuilder untuk menambahkan ringkasan hasil pencarian.
paramsBuilder.addSummary("name", 50, "em", "...", 1);
// Atur kondisi filter kueri.
paramsBuilder.addFilter("id>=0", "AND");
// Atur parameter disable untuk menonaktifkan fitur pencarian ulang:
//searchParams.putToCustomParam("disable", "re_search");
try {
// Jalankan kueri dan kembalikan hasilnya. Periksa exception berdasarkan code dan message. Untuk informasi tentang kode kesalahan, lihat dokumen Kode kesalahan.
SearchResult searchResult = searcherClient.execute(paramsBuilder);
String result = searchResult.getResult();
JSONObject obj = new JSONObject(result);
// Cetak hasil kueri.
System.out.println(obj.toString());
// Beberapa pengguna mungkin perlu men-debug informasi URL permintaan.
SearchResultDebug searchdebugrst = searcherClient.executeDebug(searchParams);
// Cetak informasi string permintaan kueri terakhir.
System.out.println(searchdebugrst.getRequestUrl());
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
}
}