全部產品
Search
文件中心

OpenSearch:文檔搜尋 Demo

更新時間:Jul 13, 2024

通過SDK 的四種調用方式(SQL QUERY、SQL串、Ha QUERY、Ha串)從召回引擎版執行個體檢索資料。

SQL QUERY 方式查詢

import java.util.HashMap;
import java.util.Map;

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;

/**
 * @author alibaba
 */
public class SearchDoc {

    public static void main(String[] args) throws Exception {

        Config config = new Config();
        // 使用者名稱,可在執行個體詳情頁>網路資訊 查看
        config.setAccessUserName("<userName>");
        // 密碼,可在執行個體詳情頁>網路資訊 修改
        config.setAccessPassWord("<password>");
        // 執行個體名稱,可在執行個體詳情頁左上方查看,例:ha-cn-i7*****605
        config.setInstanceId("<instanceID>");

        // 執行個體訪問網域名稱,VPC環境使用API網域名稱,公網環境使用公網網域名稱
        config.setEndpoint("<endpoint>");

        Client client = new Client(config);

        try {
            SearchRequestModel searchRequestModel = new SearchRequestModel();
            SearchQuery searchQuery = new SearchQuery();
            SQLQuery sqlQuery = new SQLQuery();
            sqlQuery.setQuery("select * from table_odps");
            Map<String, String> sqlQueryKvpairs = new HashMap<~>();
            sqlQueryKvpairs.put("trace", "INFO");
            sqlQueryKvpairs.put("formatType", "full_json");
            sqlQuery.setKvpairs(sqlQueryKvpairs);
            searchQuery.setSql(client.buildSQLSearchQuery(sqlQuery));

            searchRequestModel.setQuery(searchQuery);
            // 僅支援GET和POST請求方式,預設為GET,查詢query長度超過30K請使用POST請求
            searchRequestModel.setMethod("POST");
            SearchResponseModel searchResponseModel = client.Search(searchRequestModel);
            System.out.println("result:" + searchResponseModel.getBody());
        } catch (TeaException e) {
            System.out.println(e.getMessage());
            Map<String, Object> abc = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
        }
    }
}

SQL 串方式查詢

import java.util.Map;

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.Config;
import com.aliyun.ha3engine.models.SearchQuery;
import com.aliyun.ha3engine.models.SearchRequestModel;
import com.aliyun.ha3engine.models.SearchResponseModel;
import com.aliyun.tea.TeaException;

/**
 * @author alibaba
 */
public class SearchDoc {

    public static void main(String[] args) throws Exception {

        Config config = new Config();
        // 使用者名稱,可在執行個體詳情頁>網路資訊 查看
        config.setAccessUserName("<userName>");
        // 密碼,可在執行個體詳情頁>網路資訊 修改
        config.setAccessPassWord("<password>");
        // 執行個體名稱,可在執行個體詳情頁左上方查看,例:ha-cn-i7*****605
        config.setInstanceId("<instanceID>");

        // 執行個體訪問網域名稱,VPC環境使用API網域名稱,公網環境使用公網網域名稱
        config.setEndpoint("<endpoint>");

        Client client = new Client(config);

        try {
            SearchRequestModel searchRequestModel = new SearchRequestModel();
            SearchQuery searchQuery = new SearchQuery();
            searchQuery.setSql("query=select * from table_odps&&kvpair=trace:INFO;formatType:full_json");
            searchRequestModel.setQuery(searchQuery);
            // 僅支援GET和POST請求方式,預設為GET,查詢query長度超過30K請使用POST請求
            searchRequestModel.setMethod("POST");
            SearchResponseModel searchResponseModel = client.Search(searchRequestModel);
            System.out.println("result:" + searchResponseModel.getBody());
        } catch (TeaException e) {
            System.out.println(e.getMessage());
            Map<String, Object> abc = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
        }
    }
}

Ha QUERY方式查詢

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;

/**
 * @author alibaba
 */
public class SearchDoc {

    public static void main(String[] args) throws Exception {

        Config config = new Config();
        // 使用者名稱,可在執行個體詳情頁>網路資訊 查看
        config.setAccessUserName("<userName>");
        // 密碼,可在執行個體詳情頁>網路資訊 修改
        config.setAccessPassWord("<password>");
        // 執行個體名稱,可在執行個體詳情頁左上方查看,例:ha-cn-i7*****605
        config.setInstanceId("<instanceID>");

        // 執行個體訪問網域名稱,VPC環境使用API網域名稱,公網環境使用公網網域名稱
        config.setEndpoint("<endpoint>");

        Client client = new Client(config);

        try {
            HaQuery haQuery = new HaQuery();
            // 設定查詢子句,為索引及查詢內容.
            haQuery.setQuery("id:8148508889615505646");
            // 佈建要求叢集名稱.
            haQuery.setCluster("general");

            // 設定統計子句
            ArrayList<HaQueryAggregateClause> aggregateClauses = new ArrayList<>();

            HaQueryAggregateClause agg = new HaQueryAggregateClause();
            agg.setGroupKey("cate_id"); // 設定group_key
            agg.setAggFun("count()"); // 設定agg_fun
            agg.setAggFilter("cate_id=1"); // 設定agg_filter
            agg.setRange("0~10"); // 設定分段統計
            agg.setAggSamplerThresHold("5"); // 設定採樣閾值
            agg.setAggSamplerStep("5"); // 設定採樣步長
            agg.setMaxGroup("5"); // 設定最大返回組數
            // 添加Aggregate對象參數,支援設定一個或多個統計欄位樣本
            aggregateClauses.add(agg);

            haQuery.setAggregate(aggregateClauses);

            // 設定彙總打散子句
            ArrayList<HaQueryDistinctClause> DistinctClauses = new ArrayList<>();

            HaQueryDistinctClause dist = new HaQueryDistinctClause();
            dist.setDistKey("cate_id"); //設定dist_key
            dist.setDistCount("1"); //設定dist_count
            dist.setDistTimes("1"); //設定dist_times
            dist.setReserved("false"); //設定reserved
            dist.setUpdateTotalHit("false"); //設定update_total_hit
            dist.setDistFilter("cate_id<=3"); //設定過濾條件
            dist.setGrade("1.2"); //設定grade
            //添加Distinct對象參數, 支援一個或者多個. dist內容需為 unique.
            DistinctClauses.add(dist);
            haQuery.setDistinct(DistinctClauses);

            // 設定sort條件
            ArrayList<HaQuerySortClause> SortList = new ArrayList<>();
            HaQuerySortClause sorter = new HaQuerySortClause();
            //設定排序id欄位
            sorter.setSortKey("id");
            // 設定排序配置:  +  為升序,  - 為降序.
            sorter.setSortOrder("+");
            // 支援設定一個或者多個排序配置.
            SortList.add(sorter);
            haQuery.setSort(SortList);

            //  定義Config對象,用於設定config子句參數,分頁或資料返回格式等.
            HaQueryconfigClause Queryconfig = new HaQueryconfigClause();
            Queryconfig.setStart("1");
            Queryconfig.setHit("100");
            // Format目前支援返回 XML,JSON ,protobuf 等格式
            Queryconfig.setFormat("JSON");
            // 設定自訂 config 參數.
            Map<String, String> CustomConfig = new HashMap<>();
            CustomConfig.put("no_summary", "yes");
            CustomConfig.put("qrs_chain", "search");
            Queryconfig.setCustomConfig(CustomConfig);
            haQuery.setConfig(Queryconfig);

            // 設定查詢過濾條件
            // 支援設定一個或多個 filter 參數. 請使用 AND | OR 對多個 filter 進行串連.
            // 比較支援 :  '=' | '>' | '<' | '<=' | '>=' | '!='
            haQuery.setFilter("id>100 AND id<=1000");

            // 設定Kvpairs子句參數
            Map<String, String> haKvpairs = new HashMap<>();
            haKvpairs.put("duniqfield", "cate_id");
            haQuery.setKvpairs(haKvpairs);

            // 設定自訂 query 子句.
            Map<String, String> CustomQuery = new HashMap<>();
            CustomQuery.put("searcher_cache", "use:no");
            haQuery.setCustomQuery(CustomQuery);

            SearchRequestModel searchRequestModel = new SearchRequestModel();
            SearchQuery searchQuery = new SearchQuery();
            searchQuery.setQuery(client.buildHaSearchQuery(haQuery));
            searchRequestModel.setQuery(searchQuery);
            // 僅支援GET和POST請求方式,預設為GET,查詢query長度超過30K請使用POST請求
            searchRequestModel.setMethod("POST");
            SearchResponseModel responseModel = client.Search(searchRequestModel);
            System.out.println("result:" + responseModel.getBody());
        } catch (TeaException e) {
            System.out.println(e.getMessage());
            Map<String, Object> abc = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
        }
    }
}

Ha 查詢串方式查詢

import java.util.Map;

import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.Config;
import com.aliyun.ha3engine.models.SearchQuery;
import com.aliyun.ha3engine.models.SearchRequestModel;
import com.aliyun.ha3engine.models.SearchResponseModel;
import com.aliyun.tea.TeaException;

/**
 * @author alibaba
 */
public class SearchDoc {

    public static void main(String[] args) throws Exception {

        Config config = new Config();
        // 使用者名稱,可在執行個體詳情頁>網路資訊 查看
        config.setAccessUserName("<userName>");
        // 密碼,可在執行個體詳情頁>網路資訊 修改
        config.setAccessPassWord("<password>");
        // 執行個體名稱,可在執行個體詳情頁左上方查看,例:ha-cn-i7*****605
        config.setInstanceId("<instanceID>");

        // 執行個體訪問網域名稱,VPC環境使用API網域名稱,公網環境使用公網網域名稱
        config.setEndpoint("<endpoint>");

        Client client = new Client(config);

        try {
            SearchRequestModel haQueryRequestModel = new SearchRequestModel();
            SearchQuery haRawQuery = new SearchQuery();
            haRawQuery.setQuery("query=index_id:1&&config=start:0,hit:100,format:json&&cluster=general");
            haQueryRequestModel.setQuery(haRawQuery);
            // 僅支援GET和POST請求方式,預設為GET,查詢query長度超過30K請使用POST請求
            haQueryRequestModel.setMethod("POST");
            SearchResponseModel responseModel = client.Search(haQueryRequestModel);
            System.out.println("result:" + responseModel.getBody());
        } catch (TeaException e) {
            System.out.println(e.getMessage());
            Map<String, Object> abc = e.getData();
            System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
        }
    }
}