All Products
Search
Document Center

OpenSearch:Demo commit push

Last Updated:Apr 02, 2026

Gunakan OpenSearch SDK untuk Java V3.1 guna menambahkan, memperbarui, dan menghapus dokumen dalam mode commit. Dalam mode ini, Anda menyimpan satu atau beberapa dokumen dalam antrian sisi klien, lalu mengirim seluruh batch tersebut melalui satu panggilan commit.

Kasus penggunaan

  • Menggabungkan dan melakukan commit data dari berbagai sumber secara dinamis

  • Melakukan commit satu dokumen secara real time

  • Melakukan commit batch kecil dokumen sekaligus

Penting

Mode commit hanya mendukung field dalam tabel yang sama. Anda tidak dapat melakukan commit field dari tabel berbeda dalam satu panggilan.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Aplikasi OpenSearch dengan tabel yang telah dikonfigurasi

  • Nama aplikasi (appName), nama tabel (tableName), dan titik akhir API OpenSearch (host) untuk wilayah Anda

  • ID AccessKey dan rahasia AccessKey dari Pengguna Resource Access Management (RAM) yang memiliki izin OpenSearch yang diperlukan. Untuk langkah-langkah penyiapan, lihat Create a RAM user dan Access authorization rules.

Penting

Pasangan Kunci Akses akun Alibaba Cloud Anda memiliki akses ke semua operasi API. Gunakan pasangan Kunci Akses milik Pengguna RAM dan berikan peran AliyunServiceRoleForOpenSearch kepada Pengguna RAM tersebut. Jangan pernah menyimpan kredensial secara langsung di kode sumber.

Tetapkan variabel lingkungan

Tetapkan kredensial Anda sebagai variabel lingkungan agar kode contoh dapat membacanya saat waktu proses.

Linux dan macOS

Ganti <access_key_id> dan <access_key_secret> dengan ID AccessKey dan rahasia AccessKey Pengguna RAM, lalu jalankan:

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

Windows

  1. Buat file variabel lingkungan dan tambahkan ALIBABA_CLOUD_ACCESS_KEY_ID serta ALIBABA_CLOUD_ACCESS_KEY_SECRET dengan nilai yang sesuai.

  2. Mulai ulang Windows agar perubahan diterapkan.

Cara kerja

Setiap operasi mengikuti pola tiga langkah yang sama:

  1. Enkapsulasi data dokumen ke dalam objek Map.

  2. Panggil add(), update(), atau remove() untuk menempatkan dokumen dalam buffer klien.

  3. Panggil commit(appName, tableName) untuk mengirim semua dokumen yang dibuffer ke OpenSearch.

Setelah commit berhasil, periksa log error di Konsol OpenSearch untuk memastikan data telah diindeks tanpa kesalahan tingkat field (seperti kegagalan konversi tipe).

Menambahkan dokumen

Buat objek Map yang berisi field dokumen, tempatkan menggunakan add(), lalu kirim dengan commit().

package com.aliyun.opensearch;

import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Maps;
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 java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Random;

public class testCommitSearch {

    private static String appName = "Name of the OpenSearch application for which you want to commit data";
    private static String tableName = "Name of the table to which data is to be uploaded";
    private static String host = "Endpoint of the OpenSearch API in your region";

    public static void main(String[] args) {

        // Baca kredensial dari variabel lingkungan
        String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

        // Cetak encoding file dan charset default untuk debugging
        System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
        System.out.println(String.format("defaultCharset: %s", java.nio.charset.Charset.defaultCharset().name()));

        // Gunakan bilangan bulat acak sebagai kunci primary dokumen
        Random rand = new Random();
        int value = rand.nextInt(Integer.MAX_VALUE);

        // Bangun dokumen sebagai objek Map
        Map<String, Object> doc1 = Maps.newLinkedHashMap();
        doc1.put("id", value);

        String title_string = "Upload doc1 in commit mode"; // 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 = {"Upload doc1 in commit mode", "Test uploading doc1 in commit mode"};
        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);

        // Inisialisasi rantai client SDK: OpenSearch -> OpenSearchClient -> DocumentClient
        OpenSearch openSearch1 = new OpenSearch(accesskey, secret, host);
        OpenSearchClient serviceClient1 = new OpenSearchClient(openSearch1);
        DocumentClient documentClient1 = new DocumentClient(serviceClient1);

        // Tempatkan dokumen dalam buffer client
        documentClient1.add(doc1);
        System.out.println(doc1.toString());

        try {
            // Kirim semua dokumen yang dibuffer. Anda dapat menyimpan beberapa dokumen sebelum memanggil commit.
            OpenSearchResult osr = documentClient1.commit(appName, tableName);
            checkCommitResult(osr);
        } catch (OpenSearchException | OpenSearchClientException e) {
            e.printStackTrace();
        }

        // Tunggu 10 detik sebelum melakukan kueri -- OpenSearch mengindeks data secara asinkron
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // Periksa apakah commit diterima tanpa kesalahan tingkat transport.
    // Hasil "true" berarti permintaan berhasil diterima.
    // Kesalahan tingkat field (seperti kegagalan konversi tipe) dilaporkan secara terpisah
    // di log error Konsol OpenSearch.
    private static void checkCommitResult(OpenSearchResult osr) {
        if (osr.getResult().equalsIgnoreCase("true")) {
            System.out.println("Tidak terjadi kesalahan saat data dikomit! \n ID permintaan adalah " + osr.getTraceInfo().getRequestId());
        } else {
            System.out.println("Terjadi kesalahan saat data dikomit!" + osr.getTraceInfo());
        }
    }
}

Memperbarui dokumen

Untuk memperbarui dokumen, buat Map baru dengan kunci primary yang sama dan nilai field yang diperbarui, lalu panggil update() diikuti oleh commit().

// Bangun dokumen yang diperbarui -- harus mencakup kunci primary yang sama seperti dokumen asli
Map<String, Object> doc2 = Maps.newLinkedHashMap();
doc2.put("id", value); // kunci primary yang sama seperti doc1

String title_string2 = "Update doc1 in commit mode"; // 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 = {"Update doc1 in commit mode", "Update doc1 in commit mode"};
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);

// Tempatkan pembaruan dalam buffer client
documentClient1.update(doc2);
System.out.println(doc2.toString());

try {
    OpenSearchResult osr = documentClient1.commit(appName, tableName);
    checkCommitResult(osr);
} catch (OpenSearchException | OpenSearchClientException e) {
    e.printStackTrace();
}

// Tunggu 10 detik sebelum melakukan kueri
try {
    Thread.sleep(10000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

Menghapus dokumen

Untuk menghapus dokumen, buat Map yang hanya berisi kunci primary, lalu panggil remove() diikuti oleh commit().

// Hanya kunci primary yang diperlukan untuk mengidentifikasi dokumen yang akan dihapus
Map<String, Object> doc3 = Maps.newLinkedHashMap();
doc3.put("id", value);

// Tempatkan penghapusan dalam buffer client
documentClient1.remove(doc3);
System.out.println(doc3.toString());

try {
    OpenSearchResult osr = documentClient1.commit(appName, tableName);
    checkCommitResult(osr);
} catch (OpenSearchException | OpenSearchClientException e) {
    e.printStackTrace();
}

// Tunggu minimal 1 detik (disarankan 10 detik) sebelum melakukan kueri.
// Melakukan kueri segera setelah penghapusan mungkin masih mengembalikan dokumen yang telah dihapus.
try {
    Thread.sleep(10000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

Verifikasi hasil

Setelah setiap commit, lakukan kueri ke OpenSearch untuk memastikan data yang diharapkan ada atau tidak ada.

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

// Inisialisasi client terpisah untuk pencarian
OpenSearch openSearch2 = new OpenSearch(accesskey, secret, host);
OpenSearchClient serviceClient2 = new OpenSearchClient(openSearch2);
SearcherClient searcherClient2 = new SearcherClient(serviceClient2);

// Konfigurasikan paging dan format respons
// Format yang didukung: XML, JSON. FULLJSON tidak didukung.
Config config = new Config(Lists.newArrayList(appName));
config.setStart(0);
config.setHits(30);
config.setSearchFormat(SearchFormat.JSON);

// Lakukan kueri berdasarkan kunci primary
SearchParams searchParams = new SearchParams(config);
searchParams.setQuery("id:'" + value + "'");

try {
    SearchResult searchResult = searcherClient2.execute(searchParams);
    String result = searchResult.getResult();
    JSONObject obj = new JSONObject(result);
    System.out.println("Hasil kueri: " + obj.toString());
} catch (OpenSearchException | OpenSearchClientException e) {
    e.printStackTrace();
}

Langkah selanjutnya