第一步,阿里雲配置opensearch服務,建立對應的索引庫;
https://help.aliyun.com/product/29102.html
第二步,操作實例:
/** 引入阿里雲OPENsearch API文件 */
require_once(BASE_DATA_PATH."/api/opensearch/CloudsearchClient.php");
require_once(BASE_DATA_PATH."/api/opensearch/CloudsearchIndex.php");
require_once(BASE_DATA_PATH."/api/opensearch/CloudsearchDoc.php");
require_once(BASE_DATA_PATH."/api/opensearch/CloudsearchSearch.php");
$access_key = "iud34D994DSFSXHh8u2";//阿里雲提供
$secret = "ddMPLWegkeTUEI984UDHdjhd78912SVcBBad";//阿里雲提供
$host = "http://opensearch-cn-hangzhou.aliyuncs.com";
$key_type = "aliyun"; //固定值,不必修改
$opts = array('host'=>$host);
/** $app_name 爲對應索引庫名稱 */
if(ENV == 'test'){
$app_name = "te_ygm";
}elseif(ENV == 'product'){
$app_name = "ygm";
}
/** 順序的拼接 */
$order = 'RANK';
$sort = '-';
if (in_array($_POST['key'],array('1','2','3'))) {
$sort = $_POST['order'] == '1' ? '+' : '-';
$order = str_replace(array('1','2','3'), array('demo_salenum','demo_click','demo_price'), $_POST['key']);
}
$keyword = preg_replace('/\s{1,}| /','',$_POST['keyword']);
$app_id = 1234567;
/** 查詢條件的拼接 */
$query = "demo_name:'{$keyword}' AND demo_state:'1' AND is_ctoc:'0' AND demo_verify:'1' AND app_id:'{$demo_app_id}'";
/** 分頁 */
$curpage = 0;
if($_POST['curpage'] > 0){
$curpage = $this->page * ($_POST['curpage']-1);
}
$client = new CloudsearchClient($access_key,$secret,$opts,$key_type);
// 實例化一個搜索類 search_obj
$search_obj = new CloudsearchSearch($client);
// 指定一個應用用於搜索
$search_obj->addIndex($app_name);
// 指定搜索關鍵詞
$search_obj->setQueryString($query);
$search_obj->addDistinct("demo_commonid",1,1,'false','','true');//指定distinct排序
$search_obj->setPair('duniqfield:demo_commonid');//指定的kvpair
$search_obj->setFormat("json");// 搜索結果的格式爲json
$search_obj->setstartHit($curpage);//搜索結果集的偏移量
$search_obj->setHits($this->page);//結果集的數量
$search_obj->addSort($order,$sort);//結果集的數量
$result = $search_obj->search();// 執行搜索,獲取搜索結果
$result = json_decode($result,true);
if($result['status'] == "OK" && count($result['result']['items'])){
$demo_list = $result['result']['items'];
$indexer_count = $result['result']['total'];
return array($demo_list,$indexer_count);
}else{
return [[],0];
}
以上內容僅爲個人接觸所得,如有不妥,望交流建議。