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

:ドキュメント検索デモ

最終更新日:Mar 02, 2025

このトピックでは、SDK を使用して OpenSearch Vector Search Edition のインスタンスにアクセスし、データをクエリする方法を示すサンプルコードについて説明します。

サンプルコード

例 1:OpenSearch Vector Search Edition で HA クエリ文字列を使用してデータをクエリする

# -*- 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="<endpoint>",   # OpenSearch インスタンスのエンドポイント。VPC 経由でインスタンスにアクセスするには、API エンドポイントを指定する必要があります。インターネット経由でインスタンスにアクセスするには、パブリックエンドポイントを指定する必要があります。
        instance_id="<instanceID>",  # OpenSearch インスタンスの ID。インスタンス ID は、[インスタンスの詳細] ページの左上隅に表示されます。例:ha-cn-i7*****605。
        protocol="http",
        access_user_name="<userName>",  # ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
        access_pass_word="<password>"  # パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。

    )

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

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

    try:
        optionsHeaders = {}
        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)
        haSearchRequestModel = models.SearchRequestModel(optionsHeaders, haSearchQuery)
        hastrSearchResponseModel = ha3EngineClient.search(haSearchRequestModel)
        print(hastrSearchResponseModel)
      
    except TeaException as e:
        print(f"send request with TeaException : {e}")
    except RetryError as e:
        print(f"send request with Connection Exception  : {e}")

例 2:構築された HA クエリを実行して OpenSearch Vector Search 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="<endpoint>",   # OpenSearch インスタンスのエンドポイント。VPC 経由でインスタンスにアクセスするには、API エンドポイントを指定する必要があります。インターネット経由でインスタンスにアクセスするには、パブリックエンドポイントを指定する必要があります。
        instance_id="<instanceID>",  # OpenSearch インスタンスの ID。インスタンス ID は、[インスタンスの詳細] ページの左上隅に表示されます。例:ha-cn-i7*****605。
        protocol="http",
        access_user_name="<userName>",  # ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
        access_pass_word="<password>"  # パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。

    )

    # OpenSearch Vector Search Edition クライアントを初期化します。
    ha3EngineClient = client.Client(Config)
    optionsHeaders = {}

    try:
        # 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 = {
            "no_summary": "yes",
            "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)

        # OpenSearch Vector Search Edition のクエリでは、キーと値のペアは DICT タイプです。開発者ガイドを読んで、キーのコレクションについて学ぶことができます。
        haKvpairs = {
            "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 = {
            "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)
        # リクエストにデフォルトのランタイムパラメーターを使用します。
        haStructResponseModel = ha3EngineClient.search(searchRequestModel)
        print(haStructResponseModel)

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

例 3:OpenSearch Vector Search Edition で SQL クエリ文字列を使用してデータをクエリする

# -*- 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="<endpoint>",   # OpenSearch インスタンスのエンドポイント。VPC 経由でインスタンスにアクセスするには、API エンドポイントを指定する必要があります。インターネット経由でインスタンスにアクセスするには、パブリックエンドポイントを指定する必要があります。
        instance_id="<instanceID>",  # OpenSearch インスタンスの ID。インスタンス ID は、[インスタンスの詳細] ページの左上隅に表示されます。例:ha-cn-i7*****605。
        protocol="http",
        access_user_name="<userName>",  # ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
        access_pass_word="<password>"  # パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。

    )

    # OpenSearch Vector Search Edition クライアントを初期化します。
    ha3EngineClient = client.Client(Config)
    optionsHeaders = {}

    try:
        sql_str = "select * from <indexTableName>&&kvpair=trace:INFO;formatType:json"
        sqlsearchQuery = models.SearchQuery(sql=sql_str)
        sqlSearchRequestModel = models.SearchRequestModel(optionsHeaders, sqlsearchQuery)
        sqlstrSearchResponseModel = ha3EngineClient.search(sqlSearchRequestModel)
        print(sqlstrSearchResponseModel)

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

例 4:OpenSearch Vector Search Edition で SQL 文を実行してデータをクエリする

# -*- 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="<endpoint>",   # OpenSearch インスタンスのエンドポイント。VPC 経由でインスタンスにアクセスするには、API エンドポイントを指定する必要があります。インターネット経由でインスタンスにアクセスするには、パブリックエンドポイントを指定する必要があります。
        instance_id="<instanceID>",  # OpenSearch インスタンスの ID。インスタンス ID は、[インスタンスの詳細] ページの左上隅に表示されます。例:ha-cn-i7*****605。
        protocol="http",
        access_user_name="<userName>",  # ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
        access_pass_word="<password>"  # パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。

    )

    # OpenSearch Vector Search Edition クライアントを初期化します。
    ha3EngineClient = client.Client(Config)
    optionsHeaders = {}

    try:
        sqlQueryKvpairs = {
            "trace": "INFO",
            "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)
        # リクエストにデフォルトのランタイムパラメーターを使用します。
        sqlStructResponseModel = ha3EngineClient.search(searchRequestModel)
        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}")

使用上の注意