数据推送 Demo

本文将介绍通过召回引擎版Python SDK客户端将数据实时同步到召回引擎版的实例中,支持的推送操作有:add、delete。

add 操作示例

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入口 查看
    endpoint="http://ha-cn-i7*****605.public.ha.aliyuncs.com",
    # 用户名,可在实例详情页>API入口 查看
    access_user_name="username",
    # 密码,可在实例详情页>API入口 修改
    access_pass_word="password")
# 初始化 引擎客户端
client = Client(config)

# 如用户请求时间较长. 可通过此配置增加请求等待时间. 单位 ms
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:
        # 文档推送外层结构, 可添加对文档操作的结构体.结构内支持 一个或多个文档操作内容.
        documentArrayList = []

        # 添加文档
        # 添加一篇文档,如果文档已经存在会先删除然后再添加。
        # =====================================================
        add2Document = dict()
        add2DocumentFields = dict()

        # 更新文档内容信息, keyValue成对匹配.
        # 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>")

        # 内容可为问天引擎支持的多值属性类型.
        # 索引内配置为 "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()

        # 更新文档内容信息, keyValue成对匹配.
        # 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>")

        # 内容可为问天引擎支持的多值属性类型.
        # 索引内配置为    "multi_value": true, 且 "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()

delete 操作示例

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入口 查看
    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:
        # 文档推送外层结构, 可添加对文档操作的结构体.结构内支持 一个或多个文档操作内容.
        documentArrayList = []

        # 删除文档
        # 删除一篇文档,删除文档时需要指定文档主键,如果索引构建时采用多级hash方式,需要指定每级hash的主键。
        delete2Document = dict()
        delete2DocumentFields = dict()

        # 更新文档内容信息, keyValue成对匹配.
        # 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()