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 peran AliyunServiceRoleForOpenSearch oleh Akun Alibaba Cloud Anda. Untuk informasi selengkapnya, lihat AliyunServiceRoleForOpenSearch dan Aturan otorisasi akses.
Kami menyarankan agar Anda tidak menyertakan pasangan AccessKey Anda 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 SDK V4.0.0 untuk pencarian dokumen
Penanganan kesalahan pencarian: Periksa bidang code dan message untuk menentukan apakah terjadi kesalahan, bukan bidang status.
Untuk informasi selengkapnya tentang kode kesalahan, lihat Kode kesalahan.
Demo SDK:
Ganti parameter dalam kode contoh berikut dengan nilai parameter aktual Anda.
Di Konsol OpenSearch, pada halaman detail instans, temukan nama aplikasi di judul halaman. Di bagian endpoint, temukan host, yaitu titik akhir publik atau titik akhir VPC.
-
appName: Nama aplikasi Anda.
-
host: Titik akhir layanan. Ini bisa berupa titik akhir publik atau titik akhir VPC.
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 = "your_opensearch_app_name";
private static String host = "your_app_api_endpoint";
public static void main(String[] args) {
// Kredensial 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");
// Tampilkan format encoding file dan 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 inisialisasi objek OpenSearch.
OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
// Buat objek OpenSearchClient dan berikan objek OpenSearch ke konstruktor-nya.
OpenSearchClient serviceClient = new OpenSearchClient(openSearch);
// Buat objek SearcherClient dan berikan objek OpenSearchClient ke konstruktor-nya.
SearcherClient searcherClient = new SearcherClient(serviceClient);
// Definisikan objek Config untuk mengatur parameter klausa config, seperti paging, format respons, dan nama aplikasi.
Config config = new Config(Lists.newArrayList(appName));
config.setStart(0);
config.setHits(5);
// Atur format respons ke FULLJSON. Format yang didukung: 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 di objek Rank.
// Atur parameter klausa kvpairs. Dalam contoh ini, plugin uniq ditambahkan untuk klausa distinct guna mengatasi 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 mengkueri beberapa indeks, Anda harus menggabungkannya dalam metode setQuery, misalnya dengan menggunakan operator OR. Jika Anda memanggil metode setQuery beberapa kali, setiap pemanggilan akan menggantikan yang sebelumnya.
searchParams.setQuery("name:'opensearch' OR title:'opensearch'");
// Atur klausa distinct.
Distinct dist = new Distinct();
dist.setKey("cate_id"); // Atur parameter dist_key.
dist.setDistCount(1); // Atur parameter dist_count.
dist.setDistTimes(1); // Atur parameter dist_times.
dist.setReserved(false); // Atur parameter reserved.
dist.setUpdateTotalHit(false); // Atur parameter update_total_hit.
dist.setDistFilter("cate_id<=3"); // Atur kondisi filter.
dist.setGrade("1.2"); // Atur parameter grade.
// Parameter duniqfield ditambahkan dalam klausa kvpairs dari klausa config.
// Tambahkan objek Distinct.
searchParams.addToDistincts(dist);
// Atur klausa agregasi.
Aggregate agg = new Aggregate();
agg.setGroupKey("cate_id"); // Atur parameter group_key.
agg.setAggFun("count()"); // Atur parameter agg_fun.
agg.setAggFilter("cate_id=1"); // Atur parameter agg_filter.
agg.setRange("0~10"); // Aktifkan statistik rentang.
agg.setAggSamplerThresHold("5"); // Atur ambang batas pengambilan sampel.
agg.setAggSamplerStep("5"); // Atur langkah pengambilan sampel.
agg.setMaxGroup("5"); // Atur jumlah maksimum kelompok yang akan dikembalikan.
// Tambahkan objek Aggregate.
//searchParams.addToAggregates(agg);
// Kode berikut memberikan contoh cara menentukan 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 untuk kueri.
// searchParams.setFilter("id > \"0\""); // Anda juga dapat menggunakan ParamsBuilder untuk menambahkan kondisi filter.
// Atur kondisi pengurutan.
Sort sorter = new Sort();
sorter.addToSortFields(new SortField("id", Order.DECREASE)); // Urutkan hasil berdasarkan bidang id secara menurun.
sorter.addToSortFields(new SortField("RANK", Order.INCREASE)); // Jika nilai bidang id sama, urutkan hasil berdasarkan bidang RANK secara menaik.
// Kode berikut memberikan contoh cara menggunakan tag_match untuk pengurutan. Anda harus mengatur parameter Kvpairs dalam klausa config.
//sorter.addToSortFields(new SortField("tag_match(\"kk1\",int_array,10,\"max\",\"false\",\"false\")", Order.INCREASE));
//config.setKvpairs("kk1:10");
// Tambahkan objek Sort.
searchParams.setSort(sorter);
// Atur ekspresi untuk pengurutan kasar dan presisi. Dalam contoh ini, ekspresi default digunakan.
Rank rank = new Rank();
rank.setFirstRankName("default");
rank.setSecondRankName("default");
rank.setReRankSize(5); // Atur jumlah dokumen untuk pengurutan presisi.
// Tambahkan objek Rank.
searchParams.setRank(rank);
// Atur parameter penelusuran ulang.
// strategy:threshold,params:total_hits#10: strategy:threshold menentukan kebijakan penelusuran ulang. Ini adalah satu-satunya kebijakan yang didukung.
// Parameter untuk ambang batas adalah `total_hits`. Penelusuran ulang dipicu jika jumlah total hit pada pencarian awal 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 mengaitkan permintaan dengan saran pencarian.
reSearchParams.put("from_request_id", "159851481919726888064081");
//searchParams.setCustomParam(reSearchParams);
// Atur informasi ringkasan untuk hasil pencarian. Kami menyarankan Anda menggunakan objek SearchParamsBuilder untuk menambahkan informasi ringkasan.
Summary summ = new Summary("name");
summ.setSummary_field("name"); // Bidang tempat ringkasan dihasilkan. Bidang ini harus bertipe TEXT dan mengizinkan tokenisasi.
summ.setSummary_len("50"); // Panjang cuplikan.
summ.setSummary_element("em"); // Tag yang digunakan untuk menyorot kata kunci.
summ.setSummary_ellipsis("..."); // Elipsis.
summ.setSummary_snippet("1"); // Jumlah cuplikan.
// Tambahkan objek Summary.
//searchParams.addToSummaries(summ);
// Tambahkan parameter raw_query. Nilai parameter ini harus sama dengan nilai parameter query.
searchParams.setRawQuery("opensearch");
// SearchParamsBuilder adalah kelas utilitas yang menyederhanakan pembuatan parameter.
SearchParamsBuilder paramsBuilder = SearchParamsBuilder.create(
searchParams
);
// Gunakan objek SearchParamsBuilder untuk menambahkan ringkasan hasil pencarian.
paramsBuilder.addSummary("name", 50, "em", "...", 1);
// Atur kondisi filter.
paramsBuilder.addFilter("id>=0", "AND");
// Atur parameter disable untuk menonaktifkan fitur penelusuran ulang.
//searchParams.putToCustomParam("disable", "re_search");
try {
// Jalankan kueri dan kembalikan hasilnya. Anda harus memeriksa code dan message untuk menangani pengecualian. Untuk informasi lebih lanjut tentang pesan kesalahan yang sesuai dengan kode kesalahan, lihat dokumentasi terkait.
SearchResult searchResult = searcherClient.execute(paramsBuilder);
String result = searchResult.getResult();
JSONObject obj = new JSONObject(result);
// Cetak hasil pencarian.
System.out.println(obj.toString());
// Kode berikut menunjukkan cara mengambil URL permintaan untuk debugging.
SearchResultDebug searchdebugrst = searcherClient.executeDebug(
searchParams
);
// Cetak URL permintaan kueri terakhir.
System.out.println(searchdebugrst.getRequestUrl());
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
}
}
Untuk informasi selengkapnya tentang klausa kueri, lihat Klausa.