All Products
Search
Document Center

OpenSearch:Parameter dinamis

Last Updated:Apr 01, 2026

Parameter dinamis memungkinkan Anda memarameterisasi kueri SQL menggunakan placeholder ?, mirip dengan PreparedStatement pada database. Mesin mengganti setiap placeholder dengan nilai yang sesuai saat kueri dieksekusi.

Manfaat utamanya adalah efisiensi cache: kueri yang dibangun dari templat SQL yang sama meningkatkan tingkat hit cache, terlepas dari nilai parameter yang diberikan. Dengan demikian, pencarian berulang dengan input berbeda akan mengenai cache alih-alih memicu evaluasi kueri penuh setiap kali.

Catatan: Parameter dinamis hanya dapat menggantikan nilai. Mereka tidak dapat menggantikan kata kunci atau nama bidang.

Cara kerja

Semua placeholder ? dalam pernyataan SQL bersifat posisional. Berikan nilai-nilainya sebagai larik bersarang melalui dynamic_params:

dynamic_params:[[value1, value2, ...]]

Larik dalam tersebut dipetakan ke placeholder ? secara berurutan dari kiri ke kanan. Karena ? tidak membawa informasi tipe, gunakan CAST(? AS <type>) untuk menentukan tipe secara eksplisit.

Contoh

Pemrosesan tipe dasar dan pencocokan string

SELECT i1, cast(? as bigint) FROM t1 WHERE (i2 > 5 AND d3 < 10.1) OR s5 = ?
dynamic_params:[[10, "str5"]]

Placeholder ? pertama menerima 10 (di-cast ke BIGINT), sedangkan yang kedua menerima "str5" (sebuah string).

Pencarian spasial dengan pencocokan teks lengkap

SELECT
    price,
    title,
    compute(
        longitude,
        latitude,
        city_id,
        CAST(? AS double),
        CAST(? AS double),
        CAST(1 AS bigint)
    ) AS distance
FROM
    store,
    unnest(store.sub_table)
WHERE
    MATCHINDEX('shop', ?)
    AND QUERY(name, ?)
dynamic_params:[[119.98844256998,
                36.776817017143,
                "excellect",
                "fruit OR watermelon"]]

Empat placeholder ? menerima nilai secara berurutan: longitude (DOUBLE), latitude (DOUBLE), istilah pencarian MATCHINDEX, dan ekspresi QUERY. CAST(1 AS bigint) merupakan literal—bukan placeholder—sehingga tidak dimasukkan ke dalam dynamic_params.

Batasan

  • Placeholder ? hanya dapat menggantikan nilai, bukan kata kunci SQL atau nama bidang.

  • Setiap ? dicocokkan berdasarkan posisi.