全部產品
Search
文件中心

OpenSearch:使用教程

更新時間:Jul 13, 2024

快速開始

使用OpenSearch提供搜尋功能十分簡單,下面帶大家迅速上手。

配置環境變數

配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運,具體操作,請參見建立RAM使用者

  • 建立AccessKey ID和AccessKey Secret,請參考建立AccessKey

  • 如果您使用的是RAM使用者的AccessKey,請確保主帳號已授權AliyunServiceRoleForOpenSearch服務關聯角色,請參考OpenSearch-行業演算法版服務關聯角色,相關文檔參考訪問鑒權規則

  • 請不要將AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • LinuxmacOS系統配置方法:

    執行以下命令,其中, <access_key_id>需替換為您RAM使用者的AccessKey ID,<access_key_secret>替換為您RAM使用者的AccessKey Secret。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows系統配置方法

    1. 建立環境變數檔案,添加環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,並寫入已準備好的AccessKey ID和AccessKey Secret。

    2. 重啟Windows系統生效。

準備工作

登入控制台建立應用

  • 手動在控制台根據實際業務需要建立對應表結構及其它相關配置,例如:索引,屬性,資料來源,過濾條件等。

  • 下載此處我們提供的測試 標準版應用結構模板,在建立應用結構時,選擇“通過模板建立應用結構”,然後下一步,再選擇左上方的“匯入模板”,上傳此處下載的應用結構模板,一直下一步直到完成。【此應用結構測試模板,可適用於標準版Php SDK文檔中的搜尋及推送資料Demo代碼】

下載php SDK並添加到專案中

在左側欄“相關下載”頁面中下載v3版 php SDK包,並根據需編寫具體功能需要,添加如下標頭檔內容到專案中,具體參考Demo中各功能實現的代碼範例

主要功能標頭檔集合<參考>

主要功能包含,查詢應用資訊,查詢應用文檔,推送文檔,下拉提示等,依賴的標頭檔,引用對應功能的標頭檔後就可以編寫對應功能及對象方法調用。

<?php
//Config 頁面,標頭檔,包含AK,host,應用程式名稱,下拉名稱及 options 等資訊
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;

主要功能client集合<參考>

我們先執行個體化一個SDK用戶端client,在編寫對應功能時會使用到它。

<?php
//引用配置標頭檔
require_once("Config.inc.php");

//建立用於擷取應用列表client
$appClient = new AppClient($client);

//建立用於查詢文檔client
require_once("Config.inc.php");
$searchClient = new SearchClient($client);

//建立用於推送文檔client
require_once("Config.inc.php");
$documentClient = new DocumentClient($client);

//建立用於下拉查詢client
require_once("Config.inc.php");
$suggestClient = new SuggestClient($client);

建立Config配置標頭檔

Config 頁面中的內容將作為後續的查詢推送文檔的標頭檔,其中包含AK,host,應用程式名稱,下拉名稱及 options 選項,等重要參數資訊

<?php
//引入標頭檔
require_once("../OpenSearch/Autoloader/Autoloader.php");
use OpenSearch\Client\OpenSearchClient;

// 使用者識別資訊
// 從環境變數讀取配置的AccessKey ID和AccessKey Secret,
// 運行程式碼範例前必須先配置環境變數,參考文檔上面“配置環境變數”步驟
// 替換對應的access key id
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
//替換對應的access secret
$secret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
//替換為對應地區api訪問地址,可參考應用控制台,基本資料中api地址
$endPoint = '<region endPoint>';
//替換為應用程式名稱
$appName = '<app name>';
//替換為下拉提示名稱
$suggestName = '<suggest name>';
//開啟偵錯模式
$options = array('debug' => true);
//建立OpenSearchClient用戶端對象
$client = new OpenSearchClient($accessKeyId, $secret, $endPoint, $options);

上傳文檔格式

在上面代碼的基礎上我們繼續使用DocumentClient類對象向剛建立的應用中上傳一些文檔,應用程式名稱繼續使用上面config頁面中的$appName。OpenSearch應用中的文檔是一個JSON類型的字串,結構如下:

說明

此處的應用文檔格式,在應用控制台中的,上傳檔案按鈕,參考範例資料,可以下載對應的完整文檔資料格式,可直接通過上傳此處,下載的檔案到應用中進行搜尋。

[
    {
        "fields":{},
        "cmd":""
    }
...
]

cmd欄位可選的值為:ADD、DELETE、UPDATE(

標準版應用,不支援UPDATE,新增和更新都通過ADD實現,也不支援部分欄位更新

),分別表示添加、刪除以及更新一條文檔;

fields欄位內包含文檔本身的欄位屬性,比如在一個小說應用的結構中可能包含以下欄位:title:小說的名字,body:小說主體內容,url:訪問小說的地址等。

完整範例程式碼

可以下載V3 版PhpSDK,並解壓到下面代碼檔案的同級目錄中,然後直接複製下面代碼,將其中的access key和secret替換成自己的,以及替換其它關鍵資訊,就可以體驗一下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 = '替換為應用表名';
//建立文檔操作client
$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" => "搜尋".$i
        );
    $docs_to_upload[] = $item;
}
// 編碼
$json = json_encode($docs_to_upload);
//提交推送文檔
$ret = $documentClient->push($json, $appName, $tableName);


// 執行個體化一個搜尋類
$searchClient = new SearchClient($client);
// 執行個體化一個搜尋參數類
$params = new SearchParamsBuilder();
//設定config子句的start值
$params->setStart(0);
//設定config子句的hit值
$params->setHits(20);
// 指定一個應用用於搜尋
$params->setAppName('替換為應用程式名稱');
// 指定搜尋關鍵詞
$params->setQuery("name:'搜尋'");
// 指定返回的搜尋結果的格式為json
$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;

調試

通過上面的操作我們已經可以使用基本的搜尋功能了,但是最佳化搜尋、提高搜尋結果相關性是一個漫長的過程,需要我們不斷試錯和迭代來一點點改進。在這個過程中如果遇到問題或者發現結果與預期不一致時可以通過下面的介面獲得請求的詳細資料,可以通過這些資訊排查問題。特別是當遇您到問題,在WangWang群、DingTalk群中尋求協助的時候,根據調試資訊我們可以迅速幫您定位到問題所在。

echo $ret->traceInfo->tracer;