メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

主フィールドとAutoID

Zilliz Cloudのすべてのコレクションには、各エンティティを一意に識別するための主フィールドが必要です。このフィールドにより、すべてのエンティティを曖昧さなく挿入、更新、クエリ、削除できます。

使用ケースに応じて、Zilliz CloudがIDを自動生成するように設定する(AutoID)か、自分でIDを手動で割り当てるかを選択できます。

主フィールドとは?

主フィールドは、従来のデータベースの主キーと同様に、コレクション内の各エンティティの固有キーとして機能します。Zilliz Cloudは、挿入、アップサート、削除、クエリ操作中にエンティティを管理するために主フィールドを使用します。

主な要件:

  • 各コレクションには正確に1つの主フィールドが必要です。

  • 主フィールドの値をnullにすることはできません。

  • データ型は作成時に指定され、後で変更することはできません。

サポートされているデータ型

主フィールドは、エンティティを一意に識別できるサポートされているスカラーデータ型を使用する必要があります。

データ型

説明

INT64

64ビット整数型。AutoIDでよく使用されます。ほとんどの使用ケースにおすすめのオプションです。

VARCHAR

可変長文字列型。エンティティ識別子が外部システム(たとえば、商品コードやユーザーID)から来る場合に使用します。max_length プロパティが必要で、各値に許可される最大バイト数を定義します。

AutoIDと手動IDの選択

Zilliz Cloudは、主キー値を割り当てる2つのモードをサポートしています。

モード

説明

推奨対象

AutoID

Zilliz Cloudは、挿入またはインポートされたエンティティに対して一意の識別子を自動的に生成します。

IDを手動で管理する必要がないほとんどのシナリオ。

手動ID

データの挿入またはインポート時に自分で一意のIDを提供します。

IDが外部システムや既存のデータセットに合わせなければならない場合。

📘ノート

どちらのモードを選択するかわからない場合は、AutoIDから始めることをお勧めします。これにより、単純なインジェストと一意性の保証ができます。

クイックスタート: AutoIDの使用

Zilliz CloudにID生成を自動的に処理させることができます。

ステップ1: AutoIDでコレクションを作成する

主フィールド定義で auto_id=True を有効にします。Zilliz CloudがID生成を自動的に処理します。

from pymilvus import MilvusClient, DataType

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

schema = client.create_schema()

# AutoIDを有効にした主フィールドを定義
schema.add_field(
field_name="id", # 主フィールド名
is_primary=True,
auto_id=True, # MilvusがIDを自動生成; デフォルトはFalse
datatype=DataType.INT64
)

# 他のフィールドを定義
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=4) # ベクトルフィールド
schema.add_field(field_name="category", datatype=DataType.VARCHAR, max_length=1000) # VARCHAR型のスカラーフィールド

# コレクションを作成
if client.has_collection("demo_autoid"):
client.drop_collection("demo_autoid")
client.create_collection(collection_name="demo_autoid", schema=schema)

ステップ2: データを挿入

重要: データに主フィールドの列を含めないでください。Zilliz CloudがIDを自動生成します。

data = [
{"embedding": [0.1, 0.2, 0.3, 0.4], "category": "book"},
{"embedding": [0.2, 0.3, 0.4, 0.5], "category": "toy"},
]

res = client.insert(collection_name="demo_autoid", data=data)
print("Generated IDs:", res.get("ids"))

# 出力例:
# Generated IDs: [461526052788333649, 461526052788333650]
📘ノート

既存のエンティティを操作する際には、重複IDエラーを避けるためにinsert()の代わりにupsert()を使用してください。

手動IDの使用

IDを手動で管理する必要がある場合は、AutoIDを無効にして独自の値を提供してください。

ステップ1: AutoIDなしでコレクションを作成

from pymilvus import MilvusClient, DataType

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

schema = client.create_schema()

# AutoIDなしで主フィールドを定義
schema.add_field(
field_name="product_id",
is_primary=True,
auto_id=False, # データインジェスト時にIDを手動で提供
datatype=DataType.VARCHAR,
max_length=100 # datatypeがVARCHARの場合は必須
)

# 他のフィールドを定義
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=4) # ベクトルフィールド
schema.add_field(field_name="category", datatype=DataType.VARCHAR, max_length=1000) # VARCHAR型のスカラーフィールド

# コレクションを作成
if client.has_collection("demo_manual_ids"):
client.drop_collection("demo_manual_ids")
client.create_collection(collection_name="demo_manual_ids", schema=schema)

ステップ2: IDでデータを挿入

すべての挿入操作で主フィールドの列を含める必要があります。

# 各エンティティには主フィールド`product_id`が含まれている必要があります
data = [
{"product_id": "PROD-001", "embedding": [0.1, 0.2, 0.3, 0.4], "category": "book"},
{"product_id": "PROD-002", "embedding": [0.2, 0.3, 0.4, 0.5], "category": "toy"},
]

res = client.insert(collection_name="demo_manual_ids", data=data)
print("Generated IDs:", res.get("ids"))

# 出力例:
# Generated IDs: ['PROD-001', 'PROD-002']

あなたの責任:

  • すべてのIDがすべてのエンティティ間で一意であることを保証する

  • すべての挿入/インポート操作で主フィールドを含める

  • IDの競合と重複検出を自分で処理する