このトピックでは、OpenSearch 検索エンジン版 SDK for Python クライアントを使用して、OpenSearch 検索エンジン版インスタンスにデータをリアルタイムで同期する方法を示すサンプルコードを提供します。ドキュメントをアップロードおよび削除できます。
ドキュメントのアップロード
from alibabacloud_ha3engine import models
from alibabacloud_ha3engine.client import Client
from alibabacloud_ha3engine.models import Config
from alibabacloud_tea_util import models as util_models
from Tea.exceptions import TeaException, RetryError
config = Config(
# インスタンスの API エンドポイント。API エンドポイントは、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
# ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
access_user_name="username",
# パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
access_pass_word="password")
# エンジンクライアントを初期化します。
client = Client(config)
# リクエストの完了に時間がかかる場合、このパラメーターを設定してリクエストの待機時間を増やすことができます。単位:ミリ秒。
runtime = util_models.RuntimeOptions(
connect_timeout=5000,
read_timeout=10000,
autoretry=False,
ignore_ssl=False,
max_idle_conns=50
)
client._runtime_options = runtime
def pushDoc():
optionsHeaders = {}
# データをプッシュするドキュメントのテーブル名。
tableName = "<table_name>"
# データをプッシュするドキュメントのプライマリキーフィールド。
pkField = "<field_pk>"
try:
# ドキュメントデータをプッシュするために使用される外部構造。構造には、1 つ以上のドキュメント操作を指定できます。
documentArrayList = []
# アップロードするドキュメント。
# ドキュメントが既に存在する場合、既存のドキュメントは削除され、指定されたドキュメントがアップロードされます。
# =====================================================
add2Document = dict()
add2DocumentFields = dict()
# ドキュメントの内容。キーと値はペアにする必要があります。
# field_pk フィールドの値は、pkField フィールドの値と同じである必要があります。
add2DocumentFields.__setitem__("<field_pk>", "<field_pk_value>")
add2DocumentFields.__setitem__("<field_map_key_1>", "<field_map_value_1>")
add2DocumentFields.__setitem__("<field_map_key_2>", "<field_map_value_2>")
# コンテンツは、OpenSearch 検索エンジン版でサポートされている複数値属性タイプにすることができます。
# インデックスで multi_value を true に設定します。
addDocmentMultifieldsList = []
addDocmentMultifieldsList.append("multi_value_1")
addDocmentMultifieldsList.append("multi_value_2")
add2DocumentFields.__setitem__("<multi_value_key>", addDocmentMultifieldsList)
# ドキュメントの内容を add2Document 構造に追加します。
add2Document.__setitem__("fields", add2DocumentFields)
# add コマンドを実行してドキュメントをアップロードします。
add2Document.__setitem__("cmd", "add")
# ドキュメントを更新します。
# ドキュメントを更新します。属性フィールドのみを更新できます。
# =====================================================
update2Document = dict()
update2DocumentFields = dict()
# ドキュメントの内容。キーと値はペアにする必要があります。
# field_pk フィールドの値は、pkField フィールドの値と同じである必要があります。
update2DocumentFields.__setitem__("<field_pk>", "<field_pk_value>")
update2DocumentFields.__setitem__("<field_map_key_1>", "<field_map_value_1>")
update2DocumentFields.__setitem__("<field_map_key_2>", "<field_map_value_2>")
# コンテンツは、OpenSearch 検索エンジン版でサポートされている複数値属性タイプにすることができます。
# インデックスで multi_value と updatable_multi_value の両方を true に設定します。
updateDocmentMultifieldsList = []
updateDocmentMultifieldsList.append("multi_value_1")
updateDocmentMultifieldsList.append("multi_value_2")
add2DocumentFields.__setitem__("<multi_value_key>", updateDocmentMultifieldsList)
# ドキュメントの内容を update2Document 構造に追加します。
update2Document.__setitem__("fields", update2DocumentFields)
# update_field コマンドを実行してドキュメントを更新します。
update2Document.__setitem__("cmd", "update_field")
documentArrayList.append(add2Document)
documentArrayList.append(update2Document)
pushDocumentsRequestModel = models.PushDocumentsRequestModel(optionsHeaders, documentArrayList)
# デフォルトでは、データをプッシュするときにプライマリキーフィールドが存在するかどうかがチェックされます。チェックを無効にするには、リクエストヘッダー X-Opensearch-Validate-Data を false に設定します。
# pushDocumentsRequestModel.headers = {"X-Opensearch-Validate-Data": "false"}
# リクエストにはデフォルトのランタイムパラメーターを使用します。
responseModel = client.push_documents(tableName, pkField, pushDocumentsRequestModel)
print(responseModel)
except TeaException as e:
print(f"send request with TeaException : {e}")
except RetryError as e:
print(f"send request with Connection Exception : {e}")
if __name__ == "__main__":
pushDoc()
ドキュメントの削除
from alibabacloud_ha3engine import models, client
from alibabacloud_ha3engine.models import Config
from alibabacloud_ha3engine.client import Client
from Tea.exceptions import TeaException, RetryError
config = Config(
# インスタンスの API エンドポイント。API エンドポイントは、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
# ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。
access_user_name="username",
# パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] セクションで変更できます。
access_pass_word="password")
# エンジンクライアントを初期化します。
client = Client(config)
def pushDoc():
optionsHeaders = {}
# データをプッシュするドキュメントのテーブル名。
tableName = "<table_name>"
# データをプッシュするドキュメントのプライマリキーフィールド。
pkField = "<field_pk>"
try:
# ドキュメントデータをプッシュするために使用される外部構造。構造には、1 つ以上のドキュメント操作を指定できます。
documentArrayList = []
# ドキュメントを削除します。
# ドキュメントを削除する場合は、ドキュメントのプライマリキーフィールドを指定する必要があります。複数レベルのハッシュパーティションを実行してインデックスを作成する場合は、各パーティションレベルのプライマリキーフィールドを指定する必要があります。
delete2Document = dict()
delete2DocumentFields = dict()
# ドキュメントの内容。キーと値はペアにする必要があります。
# field_pk フィールドの値は、pkField フィールドの値と同じである必要があります。
delete2DocumentFields.__setitem__("<field_pk>", "<field_pk_value>")
# ドキュメントの内容を delete2Document 構造に追加します。
delete2Document.__setitem__("fields", delete2DocumentFields)
# delete コマンドを実行してドキュメントを削除します。
delete2Document.__setitem__("cmd", "delete")
documentArrayList.append(delete2Document)
pushDocumentsRequestModel = models.PushDocumentsRequestModel(
optionsHeaders, documentArrayList
)
# リクエストにはデフォルトのランタイムパラメーターを使用します。
responseModel = client.push_documents(tableName, pkField, pushDocumentsRequestModel)
print(responseModel)
except TeaException as e:
print(f"send request with TeaException : {e}")
except RetryError as e:
print(f"send request with Connection Exception : {e}")
if __name__ == "__main__":
pushDoc()