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

DashVector:ドキュメントのアップサート

最終更新日:Jan 08, 2025

このトピックでは、Python 用 SDK を使用してコレクション内のドキュメントをアップサートする方法について説明します。

説明

ターゲットドキュメントの ID が既に存在する場合、ドキュメントの更新の操作が実行されます。それ以外の場合、ドキュメントの挿入の操作が実行されます。

前提条件

  • クラスタが作成されていること。詳細については、「クラスタの作成」をご参照ください。

  • API キーを取得していること。詳細については、「API キーの管理」をご参照ください。

  • 最新バージョンの SDK がインストールされていること。詳細については、「DashVector SDK のインストール」をご参照ください。

API 定義

Collection.upsert(
    docs: Union[Doc, List[Doc], Tuple, List[Tuple]],
    partition: Optional[str] = None,
    async_req: False
) -> DashVectorResponse

説明
  1. コードを正しく実行するには、サンプルコード内の YOUR_API_KEY を実際の API キーに、YOUR_CLUSTER_ENDPOINT をクラスタのエンドポイントに置き換える必要があります。

  2. quickstart という名前のコレクションを事前に作成する必要があります。詳細については、「コレクションの作成」トピックの「例」セクションをご参照ください。

import dashvector
from dashvector import Doc
import numpy as np

client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
collection = client.get(name='quickstart')

ドキュメントのアップサート

# Doc オブジェクトを使用してドキュメントをアップサートします。
ret = collection.upsert(
    Doc(
        id='1',
        vector=[0.1, 0.2, 0.3, 0.4]
    )
)
# アップサート操作が成功したかどうかを確認します。
assert ret

# 簡略版: タプルを使用してドキュメントをアップサートします。
ret = collection.upsert(
    ('2', [0.1, 0.1, 0.1, 0.1])               # (id, vector)
)

フィールドを持つドキュメントのアップサート

# Doc オブジェクトを使用してドキュメントをアップサートし、関連フィールドの値を指定します。
ret = collection.upsert(
    Doc(
        id='3',
        vector=np.random.rand(4),
        fields={
            # コレクション作成時に事前定義されたフィールドの値を指定します。
            'name': 'zhangsan', 'weight':70.0, 'age':30, 
            # スキーマフリーのフィールドと値を指定します。
            'anykey1': 'str-value', 'anykey2': 1,
            'anykey3': True, 'anykey4': 3.1415926
        }
    )
)

# タプルを使用してドキュメントをアップサートし、関連フィールドの値を指定します。
ret = collection.upsert(
    ('4', np.random.rand(4), {'foo': 'bar'})  # (id, vector, fields)
)

複数のドキュメントを一度にアップサートする

# Doc オブジェクトを使用して 10 個のドキュメントを一度にアップサートします。
ret = collection.upsert(
    [
        Doc(id=str(i+5), vector=np.random.rand(4)) for i in range(10)
    ]
)

# 簡略版: タプルを使用して 3 つのドキュメントを一度にアップサートします。
ret = collection.upsert(
    [
        ('15', [0.2,0.7,0.8,1.3], {'age': 20}),
        ('16', [0.3,0.6,0.9,1.2], {'age': 30}),
        ('17', [0.4,0.5,1.0,1.1], {'age': 40})
    ]                                         # List[(id, vector, fields)]
)

# バッチアップサート操作が成功したかどうかを確認します。
assert ret

非同期でドキュメントをアップサートする

# 10 個のドキュメントを非同期にアップサートします。
ret_funture = collection.upsert(
    [
        Doc(id=str(i+18), vector=np.random.rand(4), fields={'name': 'foo' + str(i)}) for i in range(10)
    ],
    async_req=True
)
# 非同期アップサート操作の結果を待ちます。
ret = ret_funture.get()

スパースベクトルを含むドキュメントをアップサートする

ret = collection.upsert(
    Doc(
        id='28',
        vector=[0.1, 0.2, 0.3, 0.4],
        sparse_vector={1:0.4, 10000:0.6, 222222:0.8}
    )
)

リクエストパラメータ

パラメータ

タイプ

デフォルト値

説明

docs

Union[Doc, List[Doc], Tuple, List[Tuple]]

-

アップサートする 1 つ以上のドキュメント。

partition

Optional[str]

None

オプション。パーティションの名前。

async_req

bool

False

オプション。非同期モードを有効にするかどうかを指定します。

説明
  1. docs パラメータのタイプが Tuple の場合、タプルの要素は (id, vector) または (id, vector, fields) の順序である必要があります。この場合、タプルは Doc オブジェクトと同等です。

  2. Doc オブジェクトの各フィールドは、ユーザー定義のキーと値のペアに設定できます。キーと値のペアでは、キーは str タイプである必要があり、値は str、int、bool、または float タイプにすることができます。

    1. キーがコレクションの作成時に事前定義されている場合、値は事前定義されたタイプである必要があります。

    2. キーがコレクションの作成時に事前定義されていない場合、値は str、int、bool、または float タイプにすることができます。

  3. フィールドの事前定義の詳細については、「スキーマフリー」をご参照ください。

レスポンスパラメータ

説明

DashVectorResponse オブジェクトが返されます。これには、次の表に示すように、操作結果が含まれています。

パラメータ

タイプ

説明

code

int

返されたステータスコード。詳細については、「ステータスコード」をご参照ください。

0

message

str

返されたメッセージ。

success

request_id

str

リクエストの一意の ID。

19215409-ea66-4db9-8764-26ce2eb5bb99