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

DashVector:ドキュメントの更新

最終更新日:Jan 08, 2025

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

説明
  1. 更新対象のドキュメントの ID が存在しない場合、そのドキュメントに対する更新操作は無効です。

  2. 一部のフィールドのみを更新する場合、残りのフィールドはデフォルトで None に設定されます。

前提条件

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

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

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

API 定義

Collection.update(
    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.update(
    Doc(
        id='1',
        vector=[0.1, 0.2, 0.3, 0.4]
    )
)
# 更新操作が成功したかどうかを確認します。
assert ret

# 簡略化バージョン: タプルを使用してドキュメントを更新します。
ret = collection.update(
    ('2', [0.1, 0.1, 0.1, 0.1])               # (id, vector)
)

フィールドを持つドキュメントの更新

# Doc オブジェクトを使用してドキュメントを更新し、関連フィールドの値を指定します。
ret = collection.update(
    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.update(
    ('4', np.random.rand(4), {'foo': 'bar'})  # (id, vector, fields)
)

複数のドキュメントを同時に更新する

# Doc オブジェクトを使用して 10 個のドキュメントを同時に更新します。
ret = collection.update(
    [
        Doc(id=str(i+5), vector=np.random.rand(4)) for i in range(10)
    ]
)

# 簡略化バージョン: タプルを使用して 3 つのドキュメントを同時に更新します。
ret = collection.update(
    [
        ('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.update(
    [
        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.update(
    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