数据推送 Demo

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

add 操作示例

# -*- coding: utf-8 -*-

from alibabacloud_ha3engine import models, client
from Tea.exceptions import TeaException, RetryError

Config = models.Config(
    endpoint="<API域名>", # // API域名,可在实例详情页>API入口 查看(需要去掉http://前缀)
    instance_id="<实例id>", # // 实例id,可在实例详情页左上角查看,例:ha-cn-i7*****605
    protocol="http",
    access_user_name="<用户名>", # // 用户名,可在实例详情页>API入口 查看
    access_pass_word="<用户名密码>" # // 用户名密码,可在实例详情页>API入口 修改

)

# 初始化 引擎客户端
ha3EngineClient = client.Client(Config)
optionsHeaders = {}


def push():
    # 文档推送的数据源配置名称,可在实例管理>配置中心>数据源配置 查看.
    dataSourceName = "<数据源名称>"

    # 文档推送的文档主键字段.
    pkField = "id"

    try:
        # 文档推送外层结构, 可添加对文档操作的结构体.结构内支持 一个或多个文档操作内容.
        documentArrayList = []

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

        # 更新文档内容信息, keyValue成对匹配.
        # field_pk 字段需与 索引表结构中的pkField 字段配置一致.
        add2DocumentFields.__setitem__("id", 1) # 主键id,INT单值类型
        add2DocumentFields.__setitem__("name", "搜索") # STRING单值类型
        add2DocumentFields.__setitem__("str_arr", "a\x1Db\x1Dc\x1Dd") # STRING多值类型,默认使用ha3分割符^] 进行切分(其对应utf编码为\x1D),也可以在配置表字段时输入自定义多值分隔符

        # 将文档内容添如 add2Document结构.
        add2Document.__setitem__("fields", add2DocumentFields)
        # 新增对应的文档命令: add
        add2Document.__setitem__("cmd", "add")

        documentArrayList.append(add2Document)

        pushDocumentsRequestModel = models.PushDocumentsRequestModel(optionsHeaders, documentArrayList)

        # 使用默认 运行时参数进行请求
        responseModel = ha3EngineClient.push_documents(dataSourceName, pkField, pushDocumentsRequestModel)
        print(responseModel.body)
        print(responseModel.body)

    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__":
    push()

delete 操作示例

# -*- coding: utf-8 -*-


from alibabacloud_ha3engine import models, client
from alibabacloud_tea_util import models as util_models
from Tea.exceptions import TeaException, RetryError


Config = models.Config(
    endpoint="<API域名>",  # // API域名,可在实例详情页>API入口 查看(需要去掉http://前缀)
    instance_id="<实例id>",  # // 实例id,可在实例详情页左上角查看,例:ha-cn-i7*****605
    protocol="http",
    access_user_name="<用户名>",  # // 用户名,可在实例详情页>API入口 查看
    access_pass_word="<用户名密码>",  # // 用户名密码,可在实例详情页>API入口 修改
)

# 初始化 引擎客户端
ha3EngineClient = client.Client(Config)
optionsHeaders = {}


def pushDoc():
    # 文档推送的数据源配置名称,可在实例管理>配置中心>数据源配置 查看.
    tableName = "<数据源名称>"

    # 文档推送的文档主键字段.
    pkField = "id"

    try:
        # 文档推送外层结构, 可添加对文档操作的结构体.结构内支持 一个或多个文档操作内容.
        documentArrayList = []

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

        # 更新文档内容信息, keyValue成对匹配.
        # field_pk 字段需与 pkField 字段配置一致.
        delete2DocumentFields.__setitem__("id", "1")  # 主键pk,STRING单值类型

        # 将文档内容添如 delete2Document 结构.
        delete2Document.__setitem__("fields", delete2DocumentFields)
        # 删除对应的文档命令: delete
        delete2Document.__setitem__("cmd", "delete")

        documentArrayList.append(delete2Document)

        pushDocumentsRequestModel = models.PushDocumentsRequestModel(
            optionsHeaders, documentArrayList
        )

        # 使用默认 运行时参数进行请求
        responseModel = ha3EngineClient.push_documents(
            tableName, pkField, pushDocumentsRequestModel
        )
        print(responseModel)
        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()