すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:動的パラメータ

最終更新日:Apr 01, 2026

動的パラメータを使用すると、データベースの PrepareStatement と同様に、? プレースホルダーで SQL クエリをパラメーター化できます。エンジンは、クエリ時に各プレースホルダーを対応する値に置き換えます。

主な利点はキャッシュ効率です。同じ SQL テンプレートから構築されたクエリは、渡されるパラメーター値に関係なくキャッシュヒット率を向上させます。これにより、異なる入力での繰り返し検索が、毎回完全なクエリ評価をトリガーする代わりに、キャッシュにヒットするようになります。

注:動的パラメータはのみを置き換えることができます。キーワードやフィールド名を置き換えることはできません。

仕組み

SQL ステートメント内のすべての ? プレースホルダーは位置指定です。dynamic_params を使用して、ネストされた配列として値を渡します:

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

内部配列は、左から右の順で ? プレースホルダーにマップされます。? は型情報を持たないため、CAST(? AS <type>) を使用して明示的に型を指定します。

基本的な型キャストと文字列マッチング

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

最初の ? は 10 (BIGINT にキャスト) を受け取り、2番目の ?"str5" (文字列) を受け取ります。

地理空間検索と全文検索

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"]]

4つの ? プレースホルダーは、経度 (DOUBLE)、緯度 (DOUBLE)、MATCHINDEX の検索語、QUERY 式の順で値を受け取ります。CAST(1 AS bigint) はプレースホルダーではなくリテラルであり、dynamic_params には含まれません。

制限事項

  • ? プレースホルダーは、SQL のキーワードやフィールド名ではなく、値のみを置き換えることができます。

  • ? は位置によってマッチングされます。