All Products
Search
Document Center

OpenSearch:Kode demo untuk mengimplementasikan kueri gulir iteratif

Last Updated:Jul 02, 2025

Konfigurasikan variabel lingkungan

Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.

Penting
  • 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 telah diberikan kepada peran AliyunServiceRoleForOpenSearch menggunakan akun Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat AliyunServiceRoleForOpenSearch dan Aturan Otorisasi Akses.

  • Kami menyarankan agar Anda tidak menyertakan pasangan AccessKey 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

    1. 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.

    2. Mulai ulang Windows agar pasangan AccessKey berlaku.

Kode demo untuk mengimplementasikan kueri gulir iteratif menggunakan OpenSearch SDK for Java V4.0.0

Kueri gulir iteratif membebaskan Anda dari gangguan menentukan ID gulir untuk setiap kueri gulir.

Kueri gulir tidak mendukung klausa aggregate, distinct, atau rank, tetapi mendukung pengurutan berdasarkan satu bidang.

Catatan: Tentukan apakah terjadi kesalahan berdasarkan kode kesalahan dan pesan, bukan informasi status. Untuk informasi lebih lanjut tentang kesalahan, lihat Kode Kesalahan. Kode demo yang disediakan oleh OpenSearch SDK for Java

package com.aliyun.opensearch;

import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.search.*;
import com.aliyun.opensearch.search.DeepPageingIterator;
import java.nio.charset.Charset;

public class testScrollIterator {

    // Kueri gulir tidak mendukung klausa aggregate, distinct, atau rank, tetapi mendukung pengurutan berdasarkan satu bidang.
    private static String appName = "Nama aplikasi OpenSearch tempat Anda ingin mengimplementasikan kueri gulir iteratif";
    private static String tableName = "Nama tabel yang ingin Anda kueri";
    private static String host = "Titik akhir 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.
      	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()));


        // 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 untuk mengonfigurasi parameter klausa config, seperti parameter terkait paging, format data hasil yang dikembalikan, dan nama aplikasi.
        Config config = new Config(Lists.newArrayList(appName));

        config.setStart(start); // Parameter start yang Anda tentukan dalam klausa config tidak berlaku untuk kueri gulir. Nilai default 0 digunakan.
        config.setHits(5); // Tentukan jumlah dokumen yang akan ditampilkan di setiap halaman. Dalam contoh ini, jumlahnya diatur menjadi 5.

        // Tentukan format data hasil yang dikembalikan. Format yang didukung adalah JSON dan FULLJSON. Dalam contoh ini, format data diatur menjadi FULLJSON.
        config.setSearchFormat(SearchFormat.FULLJSON);

        // Tentukan bidang yang akan dikembalikan.
        config.setFetchFields(Lists.newArrayList("id", "name", "phone", "int_arr", "literal_arr", "float_arr", "cate_id"));
        // Catatan: Parameter rerank_size klausa config ditentukan menggunakan metode setReRankSize kelas Rank.

        // Buat objek SearchParams.
        SearchParams searchParams = new SearchParams(config);

        // Tentukan kueri pencarian. Anda dapat menentukan beberapa kueri pencarian untuk melakukan pencarian berdasarkan beberapa bidang indeks. Dalam hal ini, Anda harus menentukan bidang indeks dalam satu panggilan setQuery. Jika Anda menentukan setiap bidang indeks dalam panggilan setQuery terpisah, kueri pencarian terakhir akan menimpa kueri pencarian sebelumnya.
        searchParams.setQuery("name:'opensearch'");

        // Tentukan kondisi filter.
        // searchParams.setFilter("cate_id<=3"); // 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 mana dokumen diurutkan, dan metode pengurutan. Dalam contoh ini, dokumen diurutkan berdasarkan bidang id secara menurun.
 
         // Tambahkan objek Sort sebagai parameter kueri.
        searchParams.setSort(sorter);     
      
        // Buat objek DeepPaging untuk mengimplementasikan kueri gulir iteratif.
        DeepPaging deep =new DeepPaging();

        // Tambahkan objek DeepPaging sebagai parameter kueri.
        searchParams.setDeepPaging(deep);

        // Gunakan kelas DeepPageingIterator untuk mengimplementasikan kueri gulir iteratif. Dengan cara ini, Anda tidak perlu menentukan ID gulir.
        DeepPageingIterator pagesIterator = new DeepPageingIterator(searcherClient, searchParams);

        // Tetapkan interval iterasi, dalam milidetik. Interval default adalah 100 milidetik. Ini memastikan bahwa kecepatan paging sesuai dan tidak memberikan banyak tekanan pada layanan OpenSearch. Anda dapat menetapkan interval iterasi sesuai kebutuhan Anda.
        // pagesIterator.setPagingIntervals(80); // Interval iterasi, dalam milidetik.

        // Tentukan apakah terjadi kesalahan berdasarkan kode kesalahan dan pesan, bukan informasi status. Untuk informasi lebih lanjut tentang kesalahan, lihat topik "Kode kesalahan". 
        try{

            System.out.println("test");
            while (pagesIterator.hasNext()) {
                System.out.println("Informasi debugging: " + pagesIterator.next());
            }

        }catch(Exception ex){
            System.out.println("Pesan kesalahan: " + ex.getMessage());
        }

    }
}