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

OpenSearch:スクロールクエリの実装のデモコード

最終更新日:Dec 28, 2024

環境変数の設定

ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。

重要
  • Alibaba Cloud アカウントの AccessKey ペアを使用して、すべての API 操作にアクセスできます。API 操作の呼び出しや日常的な O&M の実行には、Resource Access Management (RAM) ユーザーを使用することをお勧めします。RAM ユーザーの使用方法については、RAM ユーザーの作成 を参照してください。

  • AccessKey ペアの作成方法については、AccessKey ペアの作成 を参照してください。

  • RAM ユーザーの AccessKey ペアを使用する場合は、Alibaba Cloud アカウントを使用して、必要な権限が AliyunServiceRoleForOpenSearch ロールに付与されていることを確認してください。詳細については、AliyunServiceRoleForOpenSearch および アクセス認証ルール を参照してください。

  • プロジェクトコードなど、他の人が簡単にアクセスできる資料に AccessKey ペアを含めないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースが安全でなくなる可能性があります。

  • Linux および macOS

    次のコマンドを実行します。<access_key_id> および <access_key_secret> を、使用する RAM ユーザーの AccessKey ID と AccessKey シークレットに置き換えます。

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

    1. 環境変数ファイルを作成し、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数をファイルに追加し、環境変数を AccessKey ID と AccessKey シークレットに設定します。

    2. AccessKey ペアを有効にするには、Windows を再起動します。

設定を含むヘッダーファイルの作成

このヘッダーファイルで指定する設定は、ドキュメントのプッシュとクエリに使用されます。設定には、AccessKey ペア、API エンドポイント、アプリケーション名、ドロップダウン候補モデルの名前、およびオプションが含まれます。

<?php
// ヘッダーファイルをインポートします。
require_once("../OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;

// AccessKey ペアを指定します。
// 環境変数から AccessKey ID と AccessKey シークレットを取得します。
// このコードを実行する前に、環境変数を設定する必要があります。詳細については、このトピックの「環境変数の設定」セクションを参照してください。
// AccessKey ID を指定します。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
// AccessKey シークレットを指定します。
$secret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
// リージョンの OpenSearch API のエンドポイントを指定します。エンドポイントは、OpenSearch コンソールのアプリケーションの詳細ページで取得できます。
$endPoint = '<region endPoint>';
// アプリケーション名を指定します。
$appName = '<app name>';
// ドロップダウン候補モデルの名前を指定します。
$suggestName = '<suggest name>';
// デバッグモードを有効にします。
$options = array('debug' => true);
// OpenSearchClient オブジェクトを作成します。
$client = new OpenSearchClient($accessKeyId, $secret, $endPoint, $options);

スクロールクエリの実装

次のサンプルコードは、スクロールクエリの実装方法を示しています。

<?php
header("Content-Type:text/html;charset=utf-8");
// ヘッダーファイルをインポートします。
require_once("Config.inc.php");
use OpenSearch\Client\SearchClient;
use OpenSearch\Util\SearchParamsBuilder;

$searchClient = new SearchClient($client);
// SearchParamsBuilder オブジェクトを作成し、パラメーターを指定します。
$params = new SearchParamsBuilder();
// 各スクロールクエリで返されるドキュメントの数を指定します。返される結果のオフセットを指定する必要はありません。
$params->setHits(1);
// アプリケーション名を指定します。
$params->setAppName('The application name'); // アプリケーション名
// 検索クエリを指定します。
$params->setQuery("name: 'Search'");
// 返される結果のデータ形式を指定します。サポートされている形式は JSON と FULLJSON です。この例では、データ形式は FULLJSON に設定されています。
$params->setFormat("fulljson");

// OpenSearch SDK for PHP V3 では、スクロールクエリは単一フィールドに基づくソートのみをサポートします。フィールドは INT タイプである必要があります。プライマリキーに基づいてソートを設定することをお勧めします。これにより、クエリ中のデータ更新によって発生するドキュメントの重複取得を防ぎます。
$params->addSort('id', SearchParamsBuilder::SORT_INCREASE);

// フィルター条件を指定します。
$params->setFilter('id>0');

// 返すフィールドを指定します。
$params->setFetchFields(array('id','name','phone','int_arr','literal_arr','float_arr','cate_id'));

// 次のスクロールクエリで使用されるスクロール ID の有効期間を分単位で指定します。この例では、値は 3m に設定されています。最初のスクロールクエリにスクロール ID を指定する必要はありません。最初のスクロールクエリは、次のスクロールクエリで使用できるスクロール ID を返します。
 $params->setScrollExpire('3m');
// クエリを実行し、結果を返します。
$ret = $searchClient->execute($params->build())->result;

for($i=0;$i<json_decode($ret)->result->viewtotal;$i++){
    // 最初のスクロールクエリのスクロール ID をクエリパラメーターとして使用します。
    $params->setScrollId(json_decode($ret)->result->scroll_id);
    // クエリを再度実行し、結果を返します。
    $ret = $searchClient->execute($params->build())->result;
    // 返された結果を表示します。
    print_r($ret.'<br/><br/>');
}