Tous les produits
Search
Centre de documentation

OpenSearch:Paramètres dynamiques

Dernière mise à jour :Aug 10, 2026

Les paramètres dynamiques permettent de paramétrer les requêtes SQL à l'aide d'espaces réservés ?, sur le modèle de PrepareStatement dans les bases de données. Le moteur substitue chaque espace réservé par la valeur correspondante lors de l'exécution de la requête.

L'avantage principal réside dans l'efficacité du cache : les requêtes générées à partir du même modèle SQL améliorent le taux de succès du cache, indépendamment des valeurs de paramètres transmises. Ainsi, les recherches répétées avec différentes entrées exploitent le cache au lieu de déclencher une évaluation complète de la requête à chaque fois.

Remarque : Les paramètres dynamiques ne peuvent remplacer que des valeurs . Ils ne peuvent pas remplacer les mots-clés ni les noms de champs.

Fonctionnement

Tous les espaces réservés ? d'une instruction SQL sont positionnels. Transmettez leurs valeurs sous forme de tableau imbriqué via dynamic_params :

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

Le tableau interne mappe les espaces réservés ? de gauche à droite. Comme ? ne porte aucune information de type, utilisez CAST(? AS <type>) pour spécifier explicitement le type.

Exemples

Conversion de type de base et correspondance de chaînes

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

Le premier ? reçoit la valeur 10 (convertie en BIGINT) et le second la valeur "str5" (une chaîne).

Recherche géospatiale avec correspondance en texte intégral

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

Les quatre espaces réservés ? reçoivent les valeurs dans l'ordre suivant : longitude (DOUBLE), latitude (DOUBLE), terme de recherche MATCHINDEX et expression QUERY. CAST(1 AS bigint) est un littéral, non un espace réservé ; il n'est donc pas inclus dans dynamic_params.

Limitations

  • Les espaces réservés ? ne peuvent remplacer que des valeurs, et non des mots-clés SQL ou des noms de champs.

  • Chaque ? est associé par position.