快速開始
使用OpenSearch提供搜索功能十分簡單,下面帶大家迅速上手。
配置環境變量
配置環境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維,具體操作,請參見創建RAM用戶。
創建AccessKey ID和AccessKey Secret,請參考創建AccessKey。
如果您使用的是RAM用戶的AccessKey,請確保主賬號已授權AliyunServiceRoleForOpenSearch服務關聯角色,請參考OpenSearch-行業算法版服務關聯角色,相關文檔參考訪問鑒權規則。
請不要將AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
Linux和macOS系統配置方法:
執行以下命令,其中,
<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系統配置方法
新建環境變量文件,添加環境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET,并寫入已準備好的AccessKey ID和AccessKey Secret。
重啟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;
調試
通過上面的操作我們已經可以使用基本的搜索功能了,但是優化搜索、提高搜索結果相關性是一個漫長的過程,需要我們不斷試錯和迭代來一點點改進。在這個過程中如果遇到問題或者發現結果與預期不一致時可以通過下面的接口獲得請求的詳細信息,可以通過這些信息排查問題。特別是當遇您到問題,在旺旺群、釘釘群中尋求幫助的時候,根據調試信息我們可以迅速幫您定位到問題所在。
echo $ret->traceInfo->tracer;