阿里雲開放搜索案例(opensearch )

第一步,阿里雲配置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];
    }

以上內容僅爲個人接觸所得,如有不妥,望交流建議。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章