すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:ドキュメント検索デモ

最終更新日:Dec 28, 2024

このトピックでは、SDK を使用して OpenSearch Retrieval Engine Edition のインスタンスにアクセスし、データをクエリする方法を示すドキュメント検索デモについて説明します。次の方法を使用して、SQL クエリまたは Havenask クエリを実行できます。

構築されたクエリを使用して SQL クエリを実行する

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();
        // ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("<userName>");
        // パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        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。クエリの長さが 30 KB を超える場合は、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();
        // ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("<userName>");
        // パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        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。クエリの長さが 30 KB を超える場合は、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));
        }
    }
}

構築されたクエリを使用して Havenask クエリを実行する

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();
        // ユーザー名。[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("<userName>");
        // パスワード。[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        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"); // 集計するフィールドを指定します。
            agg.setAggFun("count()"); // 集計関数を指定します。
            agg.setAggFilter("cate_id=1"); // 集計フィルターを指定します。
            agg.setRange("0~10"); // 集計範囲を指定します。
            agg.setAggSamplerThresHold("5"); // サンプリングされた集計のしきい値を指定します。
            agg.setAggSamplerStep("5"); // サンプリングのステップサイズを指定します。
            agg.setMaxGroup("5"); // 返されるグループの最大数を指定します。
            // 1 つ以上の Aggregate オブジェクトを追加します。
            aggregateClauses.add(agg);

            haQuery.setAggregate(aggregateClauses);

            // distinct 句を設定します。
            ArrayList<HaQueryDistinctClause> DistinctClauses = new ArrayList<>();

            HaQueryDistinctClause dist = new HaQueryDistinctClause();
            dist.setDistKey("cate_id"); // 抽出するフィールドの名前を指定します。
            dist.setDistCount(1); // 毎回抽出されるドキュメントの数を指定します。
            dist.setDistTimes(1); // 抽出回数を指定します。
            dist.setReserved(false); // 抽出後に残りのドキュメントを保持するかどうかを指定します。
            dist.setUpdateTotalHit(false); // reserved パラメーターが false に設定されている場合、破棄されたドキュメントの数を totalHits パラメーターの値から減算するかどうかを指定します。
            dist.setDistFilter("cate_id<=3"); // 抽出するドキュメントを選択するために使用されるフィルター条件を指定します。
            dist.setGrade("1.2"); // distinct 抽出のしきい値を指定します。
            // 1 つ以上の Distinct オブジェクトを追加します。dist パラメーターの値は一意である必要があります。
            DistinctClauses.add(dist);
            haQuery.setDistinct(DistinctClauses);

            // 並べ替え条件を指定します。
            ArrayList<HaQuerySortClause> SortList = new ArrayList<>();
            HaQuerySortClause sorter = new HaQuerySortClause();
            // 並べ替えるフィールドを指定します。
            sorter.setSortKey("id");
            // 並べ替え順序を指定します。プラス記号 (+) は昇順を指定します。マイナス記号 (-) は降順を指定します。
            sorter.setSortOrder("+");
            // 1 つ以上の並べ替え条件を指定します。
            SortList.add(sorter);
            haQuery.setSort(SortList);

            // Config オブジェクトを作成し、config 句を使用してページングのパラメーターと戻り結果のデータ形式を設定します。
            HaQueryconfigClause Queryconfig = new HaQueryconfigClause();
            Queryconfig.setStart("1");
            Queryconfig.setHit("100");
            // 戻り結果の形式を指定します。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);

            // フィルター条件を指定します。
            // 1 つ以上のフィルター条件を指定できます。複数のフィルター条件を指定する場合は、AND または OR を使用してフィルター条件を結合します。
            // サポートされている演算子は、等しい (=)、より大きい (>)、より小さい (<)、以下 (<=)、以上 (>=)、等しくない (!=) です。
            haQuery.setFilter("id>100 AND id<=1000");

            // kvpairs 句でパラメーターを指定します。
            Map<String, String> haKvpairs = new HashMap<>();
            haKvpairs.put("duniqfield", "cate_id");
            haQuery.setKvpairs(haKvpairs);

            // カスタムクエリ句を指定します。
            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。クエリのサイズが 30 KB を超える場合は、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));
        }
    }
}

クエリ文字列を使用して Havenask クエリを実行する

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();
        // ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
        config.setAccessUserName("<userName>");
        // パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
        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。クエリのサイズが 30 KB を超える場合は、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));
        }
    }
}