Tous les produits
Search
Centre de documentation

OpenSearch:Exemple de code pour implémenter les requêtes défilantes

Dernière mise à jour :Aug 10, 2026

Les requêtes défilantes vous permettent de récupérer de grands ensembles de résultats dépassant la limite standard de pagination. Chaque requête renvoie un identifiant de défilement (scroll ID) que vous transmettez à la requête suivante, ce qui vous permet d'itérer sur tous les documents correspondants par lots.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une application OpenSearch High-Performance Search Edition

  • Le endpoint API de votre application (disponible sur la page des détails de l'application dans la console OpenSearch)

  • Une paire AccessKey disposant des permissions requises. Utilisez la paire AccessKey d'un utilisateur Resource Access Management (RAM) plutôt que celle du compte Alibaba Cloud. Pour plus d'informations, consultez les rubriques Créer un utilisateur RAM, Créer une paire AccessKey et Règles d'autorisation d'accès. Si vous utilisez la paire AccessKey d'un utilisateur RAM, veillez à ce que les permissions requises soient accordées au rôle AliyunServiceRoleForOpenSearch via votre compte Alibaba Cloud.

Configurer les variables d'environnement

Stockez vos identifiants sous forme de variables d'environnement plutôt que de les coder en dur dans le code source.

  • Linux et macOS — Exécutez les commandes suivantes. Remplacez <access_key_id> et <access_key_secret> par l'AccessKeyID et le secret AccessKey de votre utilisateur RAM.

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows — Créez un fichier de variable d'environnement, ajoutez ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET avec leurs valeurs respectives, puis redémarrez Windows pour que les modifications prennent effet.

Créer un fichier de configuration

Créez Config.inc.php contenant les paramètres de votre application. Ce fichier est partagé par le code d'envoi (push) et le code de requête.

<?php
// Import the Autoloader.
require_once("../OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;

// Read credentials from environment variables.
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$secret      = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

// Specify the API endpoint for your region.
// Find the endpoint on the application details page in the OpenSearch console.
$endPoint = '<region endPoint>';

// Specify the application name.
$appName = '<app name>';

// Specify the drop-down suggestion model name.
$suggestName = '<suggest name>';

// Enable debug mode.
$options = array('debug' => true);

// Create the OpenSearch client.
$client = new OpenSearchClient($accessKeyId, $secret, $endPoint, $options);

Implémenter les requêtes défilantes

Le code suivant montre comment implémenter une requête défilante à l'aide du SDK OpenSearch pour PHP V3.

Important

Dans le SDK OpenSearch pour PHP V3, les requêtes défilantes ne prennent en charge le tri que sur un seul champ, lequel doit être de type INT. Triez par le champ de clé primaire pour éviter les résultats en double causés par des mises à jour de données pendant la requête.

Étape 1 : Démarrer la requête défilante

Envoyez la première requête sans identifiant de défilement. La réponse renvoie un scroll_id et le nombre total de documents correspondants (viewtotal). Définissez l'expiration du défilement afin de maintenir le contexte de recherche actif suffisamment longtemps pour terminer toutes les itérations.

<?php
header("Content-Type:text/html;charset=utf-8");

// Import the configuration file.
require_once("Config.inc.php");
use OpenSearch\Client\SearchClient;
use OpenSearch\Util\SearchParamsBuilder;

$searchClient = new SearchClient($client);

// Build the query parameters.
$params = new SearchParamsBuilder();

// Number of documents to return per batch. No offset is needed for scroll queries.
$params->setHits(1);
$params->setAppName('The application name');
$params->setQuery("name:'Search'");

// Set the return format. Supported values: JSON, FULLJSON.
$params->setFormat("fulljson");

// Sort by the primary key field (INT type, required for scroll queries).
$params->addSort('id', SearchParamsBuilder::SORT_INCREASE);

// Apply a filter condition.
$params->setFilter('id>0');

// Specify the fields to return.
$params->setFetchFields(array('id', 'name', 'phone', 'int_arr', 'literal_arr', 'float_arr', 'cate_id'));

// Set the scroll expiration. The scroll ID from this request is valid for 3 minutes.
// The first request does not require a scroll ID.
$params->setScrollExpire('3m');

// Execute the first request.
$ret = $searchClient->execute($params->build())->result;

Étape 2 : Itérer sur les résultats

Utilisez le scroll_id de chaque réponse comme entrée pour la requête suivante. Continuez jusqu'à ce que tous les documents viewtotal soient récupérés.

for ($i = 0; $i < json_decode($ret)->result->viewtotal; $i++) {
    // Pass the scroll ID from the previous response.
    $params->setScrollId(json_decode($ret)->result->scroll_id);

    // Execute the next request and print the results.
    $ret = $searchClient->execute($params->build())->result;
    print_r($ret . '<br/><br/>');
}

Paramètres clés

Paramètre Description Exemple
setHits(n) Nombre de documents à renvoyer par lot 1
setScrollExpire(t) Période de validité de l'identifiant de défilement, en minutes 3m
setScrollId(id) Identifiant de défilement de la réponse précédente json_decode($ret)->result->scroll_id
setFormat(f) Format de retour. Valeurs prises en charge : JSON, FULLJSON fulljson
addSort(field, order) Champ de tri et ordre (un seul champ INT uniquement) addSort('id', SearchParamsBuilder::SORT_INCREASE)
setFilter(condition) Condition de filtre 'id>0'
setFetchFields(fields) Champs à inclure dans la réponse array('id', 'name')