クイックスタート
このトピックでは、OpenSearch SDK for PHP を使用して検索機能を簡単に実装する方法について説明します。
環境変数の設定
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
環境変数ファイルを作成し、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数をファイルに追加し、環境変数を AccessKey ID と AccessKey シークレットに設定します。
AccessKey ペアを有効にするには、Windows を再起動します。
始める前に
OpenSearch コンソールでアプリケーションを作成する
OpenSearch コンソールにログオンします。アプリケーションを作成し、インデックスフィールド、属性フィールド、データソース、フィルター条件など、ビジネス要件に基づいてアプリケーションスキーマとその他の関連設定を手動で設定します。
OpenSearch は、アプリケーションスキーマテンプレートを提供します。テンプレートをダウンロードして、アプリケーションスキーマの設定に使用できます。「アプリケーションの設定」ページで、「テンプレートのインポート」をクリックします。「テンプレートの使用」パネルで、アプリケーションスキーマテンプレートをアップロードし、後続の操作を完了します。このアプリケーションスキーマテンプレートを使用して、クエリとデータプッシュ機能を実装するためのデモコードをテストできます。デモコードは、標準アプリケーションをサポートする OpenSearch SDK for PHP によって提供されます。
OpenSearch SDK for PHP をダウンロードしてプロジェクトに追加する
OpenSearch SDK for PHP の V3 バージョンをダウンロードし、SDK をプロジェクトに追加します。ダウンロードリンクは、「ダウンロード」トピックにあります。次に、ビジネスニーズに基づいて、次のヘッダーファイルをプロジェクトにインポートします。詳細については、OpenSearch が提供するさまざまな機能を実装するためのデモを参照してください。
OpenSearch の主な機能を実装するためのヘッダーファイル
OpenSearch の主な機能には、アプリケーション情報クエリ、アプリケーションドキュメントクエリ、ドキュメントプッシュ、ドロップダウンサジェスチョンがあります。次のサンプルコードは、ヘッダーファイルを依存関係としてインポートする方法を示しています。その後、オブジェクトとメソッドを使用して機能を実装できます。
<?php
// AccessKey 情報、API エンドポイント、アプリケーション名、ドロップダウンサジェスチョン名、オプションなど、基本的な設定を完了するためのヘッダーファイルをインポートします。
require_once("../OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;
// アプリケーション情報クエリ機能を実装するためのヘッダーファイルをインポートします。
require_once("Config.inc.php");
use OpenSearch\Client\AppClient;
use OpenSearch\Generated\Common\Pageable;
// ドキュメントクエリ機能を実装するためのヘッダーファイルをインポートします。
require_once("Config.inc.php");
use OpenSearch\Client\SearchClient;
use OpenSearch\Util\SearchParamsBuilder;
// ドキュメントプッシュ機能を実装するためのヘッダーファイルをインポートします。
require_once("Config.inc.php");
use OpenSearch\Client\DocumentClient;
// ドロップダウンサジェスチョン機能を実装するためのヘッダーファイルをインポートします。
require_once("Config.inc.php");
use OpenSearch\Client\SuggestClient;
use OpenSearch\Util\SuggestParamsBuilder;
OpenSearch の主な機能を実装するためのクライアント
OpenSearch の主な機能を実装するには、いくつかのクライアントを作成する必要もあります。
<?php
// 基本設定を完了するためのヘッダーファイルをインポートします。
require_once("Config.inc.php");
// アプリケーション情報クエリ機能を実装するためのクライアントを作成します。
$appClient = new AppClient($client);
// ドキュメントクエリ機能を実装するためのクライアントを作成します。
require_once("Config.inc.php");
$searchClient = new SearchClient($client);
// ドキュメントプッシュ機能を実装するためのクライアントを作成します。
require_once("Config.inc.php");
$documentClient = new DocumentClient($client);
// ドロップダウンサジェスチョン機能を実装するためのクライアントを作成します。
require_once("Config.inc.php");
$suggestClient = new SuggestClient($client);
基本設定を完了するためのヘッダーファイル
このヘッダーファイルで指定する設定は、ドキュメントプッシュ機能とドキュメントクエリ機能を実装するために使用されます。設定には、AccessKey 情報、API エンドポイント、アプリケーション名、ドロップダウンサジェスチョン名、オプションが含まれます。
<?php
// ヘッダーファイルをインポートします。
require_once("../OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;
// AccessKey ペアを指定します。
// 設定済みの AccessKey ID と AccessKey シークレットを環境変数から取得します。
// サンプルコードを実行する前に、環境変数を設定します。詳細については、このトピックの「環境変数の設定」セクションを参照してください。
// Alibaba Cloud アカウントの AccessKey ID を指定します。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
// Alibaba Cloud アカウントの 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);
ドキュメントのデータ形式
上記の構成が完了したら、DocumentClient オブジェクトを使用して、新しく作成されたアプリケーションにドキュメントをアップロードします。アプリケーション名は、基本設定を完了するためのヘッダーファイルの $appName パラメーターで指定されます。OpenSearch アプリケーションにアップロードできるドキュメントは、JSON 文字列である必要があります。次のコードは、ドキュメントの構造を示しています。
OpenSearch コンソールの「インスタンス管理」ページで、アプリケーションの「アクション」列の「その他」>「ファイルのアップロード」を選択できます。「ファイルのアップロード」ダイアログボックスで、サンプルファイルをダウンロードしてアプリケーションにアップロードし、クエリ機能をテストできます。
[
{
"fields":{},
"cmd":""
}
...
]
cmd フィールドの有効な値は、ADD、DELETE、UPDATE です。cmd フィールドを ADD、DELETE、または UPDATE に設定して、ドキュメントを追加、削除、または更新できます。
標準アプリケーションの場合、cmd フィールドは ADD 操作と DELETE 操作のみをサポートします。標準アプリケーションでドキュメントを更新する場合は、更新するフィールドだけでなく、ドキュメントのすべてのフィールドを指定する必要があります。したがって、ドキュメントの更新も ADD 操作によって実装されます。
fields フィールドは、ドキュメントのコアビジネスデータを定義するために使用されます。たとえば、ドキュメントのアップロード先アプリケーションが小説検索アプリケーションの場合は、title、body、url などのフィールドを定義できます。
完全なサンプルコード
次のサンプルコードの設定を独自の情報に置き換え、PHP ファイルとして保存します。OpenSearch SDK for PHP の V3 バージョンをダウンロードし、保存したファイルが存在する同じディレクトリに SDK パッケージを解凍します。その後、OpenSearch の主な機能を使用できます。
<?php
header("Content-Type:text/html;charset=utf-8");
// ヘッダーファイルをインポートします。
require_once("Config.inc.php");
use OpenSearch\Client\DocumentClient;
use OpenSearch\Client\SearchClient;
use OpenSearch\Util\SearchParamsBuilder;
// ドキュメントのアップロード先テーブルを指定します。
$tableName = 'ドキュメントのアップロード先テーブル';
// DocumentClient オブジェクトを作成します。
$documentClient = new DocumentClient($client);
// アップロードするドキュメントを配列に追加します。
$docs_to_upload = array();
for ($i = 0; $i < 10; $i++){
$item = array();
$item['cmd'] = 'ADD';
$item["fields"] = array(
"id" => $i + 1,
"name" => "Search".$i
);
$docs_to_upload[] = $item;
}
// ドキュメントをエンコードします。
$json = json_encode($docs_to_upload);
// push メソッドを呼び出して、ドキュメントをアップロードします。
$ret = $documentClient->push($json, $appName, $tableName);
// SearchClient オブジェクトを作成します。
$searchClient = new SearchClient($client);
// SearchParamsBuilder オブジェクトを作成します。
$params = new SearchParamsBuilder();
// config 句の start パラメーターを設定します。
$params->setStart(0);
// config 句の hit パラメーターを設定します。
$params->setHits(20);
// 検索機能を実装するアプリケーションを指定します。
$params->setAppName('アプリケーション名');
// クエリキーワードを指定します。
$params->setQuery("name: 'Search'");
// 戻り値のデータ形式を指定します。この例では、データ形式は FULLJSON に設定されています。
$params->setFormat("fulljson");
// ドキュメントのソート基準となるフィールドを指定します。
$params->addSort('RANK', SearchParamsBuilder::SORT_DECREASE);
// クエリを実行し、結果を返します。
$ret = $searchClient->execute($params->build());
// JSON 形式の結果をデコードします。
print_r(json_decode($ret->result,true));
// デバッグ情報を表示します。
echo $ret->traceInfo->tracer;
デバッグ
上記の構成は、基本的な検索要件を満たすのに十分です。ただし、検索パフォーマンスを徐々に最適化し、検索結果の関連性を向上させるには、さらに多くの試行錯誤と反復が必要です。このプロセスで、問題が発生したり、検索結果が期待に沿わない場合があります。このような場合は、次のサンプルコードを実行して、問題の要求に関する詳細情報を取得し、トラブルシューティングに使用できます。問題が発生した場合は、OpenSearch の TradeManager または DingTalk サポートグループに支援を求めることができます。技術エンジニアが原因を分析して特定できるように、デバッグ情報を提供する必要があります。
echo $ret->traceInfo->tracer;