全部产品
Search
文档中心

OpenSearch:Pencarian dasar

更新时间:Nov 11, 2025

Konfigurasi variabel lingkungan

Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.

Penting
  • Pasangan Kunci Akses 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 Kunci Akses, lihat Buat pasangan Kunci Akses.

  • Jika Anda menggunakan pasangan Kunci Akses 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 Kunci Akses dalam materi yang mudah diakses orang lain, seperti kode proyek. Jika tidak, pasangan Kunci Akses 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 pengguna RAM yang Anda gunakan.

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows

    1. Buat file variabel lingkungan, tambahkan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET ke file tersebut, lalu atur nilainya sesuai dengan ID AccessKey dan Rahasia AccessKey Anda.

    2. Mulai ulang Windows agar pasangan Kunci Akses berlaku.

Kode demo untuk mengimplementasikan fitur pencarian menggunakan OpenSearch SDK untuk Java V4.0.0

Catatan: Tentukan apakah terjadi kesalahan berdasarkan kode kesalahan dan pesan, bukan berdasarkan informasi status.

Untuk informasi lebih lanjut tentang kesalahan, lihat Kode kesalahan.

Demo SDK:

Dalam penggunaan aktual, Anda harus mengganti parameter berikut dengan nilai yang sesuai.

image

  • appName: nama instans.

  • host: titik akhir yang digunakan untuk memanggil API OpenSearch. Anda dapat memanggil API melalui Internet atau virtual private cloud (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 = "Nama aplikasi OpenSearch yang ingin Anda kelola";
  private static String host = "Titik akhir API OpenSearch di wilayah Anda";

  public static void main(String[] args) {
    // Tentukan pasangan Kunci Akses Anda.
    // Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Anda harus mengonfigurasi variabel lingkungan sebelum menjalankan kode ini.
    String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // Dapatkan format encoding 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 objek OpenSearch.
    OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
    // Gunakan objek OpenSearch sebagai parameter untuk membuat objek OpenSearchClient.
    OpenSearchClient serviceClient = new OpenSearchClient(openSearch);
    // Gunakan objek OpenSearchClient sebagai parameter untuk membuat objek SearcherClient.
    SearcherClient searcherClient = new SearcherClient(serviceClient);
    // Buat objek Config dan gunakan klausa config untuk mengonfigurasi parameter seperti nama aplikasi, parameter terkait penomoran halaman, dan format data hasil yang dikembalikan.
    Config config = new Config(Lists.newArrayList(appName));
    config.setStart(0);
    config.setHits(5);
    // Tentukan format data hasil pengembalian. Format yang didukung meliputi XML, JSON, dan FULLJSON. Pada contoh ini, format data diatur ke 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 dari klausa config ditentukan menggunakan metode setReRankSize dari kelas Rank.
    // Tentukan klausa kvpairs. Pada contoh ini, plugin uniq ditambahkan ke klausa distinct. Hal ini memastikan bahwa nilai parameter total dan viewtotal akurat jika parameter setReserved diatur ke false.
    //config.setKvpairs("duniqfield:cate_id");
    // Buat objek SearchParams.
    SearchParams searchParams = new SearchParams(config);
    // Tentukan klausa kueri. Anda dapat menentukan beberapa kata kunci untuk melakukan kueri berdasarkan beberapa bidang indeks. Dalam kasus ini, Anda harus menentukan bidang indeks dalam satu pemanggilan setQuery. Anda dapat menghubungkan dua bidang indeks dengan OR. Kode berikut memberikan contohnya. Jika Anda menentukan setiap bidang indeks dalam pemanggilan setQuery terpisah, klausa terakhir akan menimpa klausa sebelumnya.
    searchParams.setQuery("name:'opensearch' OR title:'opensearch'");
    // Buat objek Distinct.
    Distinct dist = new Distinct();
    dist.setKey("cate_id"); // Tentukan bidang yang akan digunakan untuk ekstraksi unik.
    dist.setDistCount(1); // Tentukan jumlah dokumen yang diekstraksi setiap kali.
    dist.setDistTimes(1); // Tentukan jumlah kali ekstraksi.
    dist.setReserved(false); // Tentukan apakah akan menyimpan dokumen tersisa setelah ekstraksi.
    dist.setUpdateTotalHit(false); // Tentukan apakah akan mengurangi jumlah dokumen yang dibuang dari nilai parameter totalHits jika parameter setreserved diatur ke false.
    dist.setDistFilter("cate_id<=3"); // Tentukan kondisi filter yang akan digunakan untuk memilih dokumen yang akan diekstraksi.
    dist.setGrade("1.2"); // Tentukan ambang batas untuk ekstraksi unik.
    // Parameter duniqfield ditentukan dalam bentuk klausa kvpairs pada klausa config.
    // Tambahkan objek Distinct sebagai parameter kueri.
    searchParams.addToDistincts(dist);
    // Buat objek Aggregate.
    Aggregate agg = new Aggregate();
    agg.setGroupKey("cate_id"); // Tentukan bidang yang akan diagregasi.
    agg.setAggFun("count()"); // Tentukan fungsi agregasi.
    agg.setAggFilter("cate_id=1"); // Tentukan filter agregasi.
    agg.setRange("0~10"); // Tentukan rentang agregasi.
    agg.setAggSamplerThresHold("5"); // Tetapkan ambang batas untuk agregasi sampel.
    agg.setAggSamplerStep("5"); // Tentukan ambang batas untuk agregasi sampel.
    agg.setMaxGroup("5"); // Tentukan jumlah maksimum grup yang dapat dikembalikan.
    // Tambahkan objek Aggregate sebagai parameter kueri.
    //searchParams.addToAggregates(agg);
    // Tentukan beberapa bidang statistik.
    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);
    // Tentukan parameter biz.
    Map hashMap = new HashMap();
    hashMap.put("biz", "type:web");
    searchParams.setCustomParam(hashMap);
    // Tentukan kondisi filter.
    // searchParams.setFilter("id > \"0\""); // Anda juga dapat menetapkan kondisi filter menggunakan kelas SearchParamsBuilder.
    // Tentukan kondisi pengurutan.
    Sort sorter = new Sort();
    sorter.addToSortFields(new SortField("id", Order.DECREASE)); // Tentukan bidang berdasarkan dokumen yang akan diurutkan, dan metode pengurutannya. Pada contoh ini, dokumen diurutkan berdasarkan bidang id secara menurun.
    sorter.addToSortFields(new SortField("RANK", Order.INCREASE)); // Jika beberapa dokumen memiliki nilai bidang id yang sama, urutkan dokumen tersebut berdasarkan bidang RANK secara menaik.
    // Pada contoh ini, dokumen diurutkan berdasarkan bidang tag_match. Pasangan kunci-nilai harus diatur untuk klausa config.
    //sorter.addToSortFields(new SortField("tag_match(\"kk1\",int_array,10,\"max\",\"false\",\"false\")", Order.INCREASE));
    //config.setKvpairs("kk1:10");

    // Tambahkan kondisi pengurutan sebagai parameter kueri.
    searchParams.setSort(sorter);
    // Tentukan ekspresi pengurutan kasar dan ekspresi penyortiran halus. Pada contoh ini, ekspresi default digunakan.
    Rank rank = new Rank();
    rank.setFirstRankName("default");
    rank.setSecondRankName("default");
    rank.setReRankSize(5); // Tentukan jumlah dokumen yang akan diurutkan berdasarkan ekspresi penyortiran halus.
    // Tambahkan objek Aggregate sebagai parameter kueri.
    searchParams.setRank(rank);
    // Tentukan parameter re_search.
    //strategy:threshold,params:total_hits#10 => "strategy:threshold" menunjukkan strategi kueri. Hanya satu strategi yang didukung. 
    // Gunakan parameter total_hits untuk menetapkan ambang batas. Jika nilai parameter total_hits untuk eksekusi pertama kueri kurang dari ambang batas yang ditentukan, kueri akan dijalankan kembali. 
    Map<String, String> reSearchParams = new HashMap<String, String>();
    reSearchParams.put("re_search", "strategy:threshold,params:total_hits#10");
    // Tentukan parameter from_request_id untuk kueri yang terkait dengan saran drop-down.
    reSearchParams.put("from_request_id", "159851481919726888064081");
    //searchParams.setCustomParam(reSearchParams);
    // Buat objek Summary. Pada contoh ini, ringkasan hasil pencarian ditambahkan sebagai parameter kueri menggunakan objek SearchParamsBuilder.
    Summary summ = new Summary("name");
    summ.setSummary_field("name");// Tentukan bidang berdasarkan ringkasan yang akan dihasilkan. Bidang tersebut harus bertipe teks agar dapat dianalisis. 
    summ.setSummary_len("50");// Tentukan panjang setiap cuplikan.
    summ.setSummary_element("em"); // Tentukan nama tag HTML yang digunakan untuk menyorot kueri pencarian dengan warna merah.
    summ.setSummary_ellipsis("..."); // Tentukan penghubung yang digunakan untuk menghubungkan segmen.
    summ.setSummary_snippet("1");// Tentukan jumlah cuplikan ringkasan yang dapat dipukul setiap kueri.
    // Tambahkan objek Summary sebagai parameter kueri.
    //searchParams.addToSummaries(summ);

    // Tambahkan parameter raw_query. Nilai parameter harus sama dengan kueri pencarian.
    searchParams.setRawQuery("opensearch");
    // Buat objek SearchParamsBuilder. Sebagai kelas utilitas dari SearchParams, kelas SearchParamsBuilder memungkinkan Anda mengonfigurasi parameter terkait kueri dengan mudah.
    SearchParamsBuilder paramsBuilder = SearchParamsBuilder.create(
      searchParams
    );
    // Gunakan objek SearchParamsBuilder untuk menambahkan ringkasan hasil pencarian yang telah dibuat sebagai parameter kueri.
    paramsBuilder.addSummary("name", 50, "em", "...", 1);
    // Tentukan kondisi filter.
    paramsBuilder.addFilter("id>=0", "AND");

    // Tentukan parameter disable untuk menonaktifkan fitur re-search:
    //searchParams.putToCustomParam("disable", "re_search");
    try {
      // Jalankan kueri dan kembalikan hasilnya. Tentukan apakah terjadi kesalahan berdasarkan kode kesalahan dan pesan. Untuk informasi lebih lanjut tentang kesalahan, lihat topik "Kode kesalahan". 
      SearchResult searchResult = searcherClient.execute(paramsBuilder);
      String result = searchResult.getResult();
      JSONObject obj = new JSONObject(result);
      // Tampilkan hasil pencarian.
      System.out.println(obj.toString());
      // Anda mungkin memerlukan informasi tentang alamat permintaan untuk debugging.
      SearchResultDebug searchdebugrst = searcherClient.executeDebug(
        searchParams
      );
      // Tampilkan string permintaan dari kueri terakhir.
      System.out.println(searchdebugrst.getRequestUrl());
    } catch (OpenSearchException e) {
      e.printStackTrace();
    } catch (OpenSearchClientException e) {
      e.printStackTrace();
    }
  }
}
Catatan

Untuk informasi lebih lanjut tentang klausa kueri, lihat Klausa.