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

OpenSearch:データプッシュデモ

最終更新日:May 14, 2025

このトピックでは、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()