このトピックでは、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}")使用上の注意
クエリの長さが 30 KB を超える場合は、RESTful API を呼び出してデータをクエリします。詳細については、「RESTful API を呼び出して検索リクエストを開始する」をご参照ください。