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

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

最終更新日:Dec 28, 2024

このトピックでは、SDK を使用して Retrieval Engine Edition インスタンスにアクセスし、データをクエリする方法について説明します。

サンプルコード

# -*- coding: utf-8 -*-


from alibabacloud_ha3engine import models, client
from alibabacloud_tea_util import models as util_models
from Tea.exceptions import TeaException, RetryError
def search():
    Config = models.Config(
        endpoint="ha-cn-7mz2ougaw02.ha.aliyuncs.com",
        instance_id="ha-cn-7mz2ougaw02",
        protocol="http",
        access_user_name="user",
        access_pass_word="111111"

    )

    # リクエストの完了に時間がかかる場合、このパラメータを設定してリクエストの待機時間を増やすことができます。単位:ミリ秒。
    # このパラメータは search_with_options メソッドで使用できます。
    runtime = util_models.RuntimeOptions(
        connect_timeout=5000,
        read_timeout=10000,
        autoretry=False,
        ignore_ssl=False,
        max_idle_conns=50
    )

    # OpenSearch Retrieval Engine Edition V3.0 クライアントを初期化します。
    ha3EngineClient = client.Client(Config)

    optionsHeaders = {}

    try:



        # 例 1: クエリ文字列を使用して Havenask クエリを実行します。
        # =====================================================
        query_str = "config=hit:4,format:json,fetch_summary_type:pk,qrs_chain:search&&query=id:<pk>&&cluster=general"
        haSearchQuery = models.SearchQuery(query=query_str)
      	# オプション。リクエストメソッド。GET メソッドと POST メソッドのみがサポートされています。デフォルト値:GET。
        haSearchRequestModel = models.SearchRequestModel(headers=optionsHeaders, query=haSearchQuery, method='POST')
        hastrSearchResponseModel = ha3EngineClient.search(haSearchRequestModel)
        print(hastrSearchResponseModel)
        # =====================================================

        # 例 2: 構築されたクエリを使用して Havenask クエリを実行します。
        # =====================================================
        # distinct 句を設定します。
        DistinctClauses = []

        # 集約句のパラメータを指定します。
        aggregateClauses = []
        haQueryAggregateClause = models.HaQueryAggregateClause(
            group_key="cate_id",  # 集約するフィールドを指定します。
            agg_fun="count()",  # 集約関数を指定します。
            range="0~10",  # 集約範囲を指定します。
            max_group="5",  # 返されるグループの最大数を指定します。
            agg_filter="cate_id=1",  # 集約フィルタを指定します。
            agg_sampler_thres_hold="5",  # サンプリングされた集約のしきい値を指定します。
            agg_sampler_step="5",  # サンプリングのステップサイズを指定します。
        )

        # 1 つ以上の Aggregate オブジェクトを追加します。
        aggregateClauses.append(haQueryAggregateClause)

        # Config オブジェクトを作成し、config 句を使用してページングのパラメータと戻り結果のデータ形式を設定します。
        CustomConfig = dict()
        CustomConfig.__setitem__("no_summary", "yes")
        CustomConfig.__setitem__("qrs_chain", "search")
        haQueryconfig = models.HaQueryconfigClause(
            # データのクエリを開始する位置を指定します。
            start="1",

            # クエリで返すページ数を指定します。
            hit="10",

            # 返される結果の形式を指定します。XML、JSON、Protobuf などの形式がサポートされています。
            format="JSON",

            # カスタム設定オブジェクトのパラメータを指定します。
            custom_config=CustomConfig
        )

        # 並べ替え条件を指定します。
        haQuerySortClauseList = []
        haQuerySortClause = models.HaQuerySortClause(
            # 並べ替えるフィールドを指定します。
            sort_key="id",
            # 並べ替え順序を指定します。プラス記号(+)は昇順を指定します。マイナス記号(-)は降順を指定します。
            sort_order="+"
        )
        haQuerySortClauseList.append(haQuerySortClause)

        # Havenask クエリでは、キーと値のペアは DICT タイプです。開発ガイドを読んで、キーのコレクションについて学ぶことができます。
        haKvpairs = dict()
        haKvpairs.__setitem__("uniqfield", "cate_id")

        # distinct 句を設定します。
        DistinctClauses = []

        dist = models.HaQueryDistinctClause(
            # 抽出するフィールドの名前を指定します。
            dist_key="cate_id",
            # 抽出されるドキュメントの数を指定します。
            dist_count="1",
            # 抽出回数を指定します。
            dist_times="1",
            # 抽出後に残りのドキュメントを保持するかどうかを指定します。
            reserved="false",
            # 抽出するドキュメントを選択するために使用されるフィルタ条件を指定します。
            dist_filter="cate_id<=3",
            # reserved パラメータが false に設定されている場合、破棄されたドキュメントの数を totalHits パラメータの値から減算するかどうかを指定します。
            update_total_hit="false",
            # distinct 抽出のしきい値を指定します。
            grade="1.2",
        )

        # 1 つ以上の Distinct オブジェクトを追加します。dist パラメータの値は一意である必要があります。
        DistinctClauses.append(dist)

        # カスタムクエリ句を設定します。
        CustomQuery = dict()
        CustomQuery.__setitem__("searcher_cache", "use:no")

        haQuery = models.HaQuery(

            # インデックスとクエリの内容を含むクエリ句を指定します。
            query="id:8148508889615505646",

            # リクエストするクラスタの名前を指定します。
            cluster="general",

            # config 句のパラメータを指定します。
            config=haQueryconfig,

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

            # aggregate 句のパラメータを指定します。
            aggregate=aggregateClauses,

            # kvpairs 句のパラメータを指定します。
            kvpairs=haKvpairs,

            # sort 句のパラメータを指定します。
            sort=haQuerySortClauseList,

            # distinct 句のパラメータを指定します。
            distinct=DistinctClauses,
            custom_query=CustomQuery

        )
        searchQuery = models.SearchQuery(query=ha3EngineClient.build_ha_search_query(haQuery))
        searchRequestModel = models.SearchRequestModel(optionsHeaders, searchQuery)
        # リクエストメソッド。デフォルトのランタイムパラメータを使用してリクエストを開始する場合は、このパラメータを指定する必要はありません。GET メソッドと POST メソッドのみがサポートされています。デフォルト値:GET。クエリの長さが 30 KB を超える場合は、POST メソッドを使用します。
        haStructResponseModel = ha3EngineClient.search(query=searchRequestModel, method='POST')
        print(haStructResponseModel)



        # 例 3: クエリ文字列を使用して SQL クエリを実行します。
        # =====================================================
        sql_str = "select * from <indexTableName>&&kvpair=trace:INFO;formatType:json"
        sqlsearchQuery = models.SearchQuery(sql=sql_str)
        sqlSearchRequestModel = models.SearchRequestModel(optionsHeaders, sqlsearchQuery)
				# オプション。リクエストメソッド。GET メソッドと POST メソッドのみがサポートされています。デフォルト値:GET。クエリの長さが 30 KB を超える場合は、POST メソッドを使用します。
        sqlstrSearchResponseModel = ha3EngineClient.search(query=sqlSearchRequestModel, method='POST')
        print(sqlstrSearchResponseModel)

        # 例 4: 構築されたクエリを使用して SQL クエリを実行します。
        # =====================================================
        sqlQueryKvpairs  =dict()
        sqlQueryKvpairs.__setitem__("trace", "INFO")
        sqlQueryKvpairs.__setitem__("formatType", "full_json")

        sqlQuery =models.SQLQuery(
            query  ="select * from odps",
            kvpairs=sqlQueryKvpairs
        )

        searchQuery = models.SearchQuery(sql=ha3EngineClient.build_sqlsearch_query(sqlQuery))
        searchRequestModel = models.SearchRequestModel(optionsHeaders, searchQuery)
        # リクエストメソッド。デフォルトのランタイムパラメータを使用してリクエストを開始する場合は、このパラメータを指定する必要はありません。GET メソッドと POST メソッドのみがサポートされています。デフォルト値:GET。クエリの長さが 30 KB を超える場合は、POST メソッドを使用します。
        sqlStructResponseModel = ha3EngineClient.search(query=searchRequestModel, method='POST')
        print(sqlStructResponseModel)

    except TeaException as e:
        print(f"send request with TeaException : {e}")
    except RetryError as e:
        print(f"send request with Connection Exception  : {e}")