跳到主要内容
版本:BYOC 开发指南

插入 Entity

Collection 中的 Entity 是指共享相同字段集的数据记录。存储在每个字段中的一条数据组成一个 Entity。本节介绍如何向 Collection 中插入一条数据以及在插入 Entity 时的相关注意事项。

📘说明
  • 重复数据处理:标准的 insert 操作并不会检查主键重复的记录。如果您在插入数据时指定了一个重复的主键,仍然会创建一个新的 Entity,从而导致重复数据和潜在的应用问题。您可以通过使用 upsert 操作来更新相关 Entity 或修复重复主键的问题。更多内容,可以参阅 Upsert Entity

概述

在 Zilliz Cloud 中,Entity 是指 Collection 中共享相同 Schema 的数据记录,存储在每个字段中的同行数据组成一个 Entity。因此,同一个 Collection 中的 Entity 具有相同的属性(如字段名称、数据类型、其他限制等)。

在向 Collection 插入 Entity 时,待插入的 Entity 只有在包含 Schema 中定义的所有字段时才能成功插入。插入的 Entity 将会按照插入的先后顺序进入名为 _default 的 Partition 中。在确保某个 Partition 存在的前提下,你也可以通过在插入请求中指定该 Partition 名称的方式向该 Partition 中插入 Entity。

为了保持 Collection 的扩展性,Zilliz Cloud 也支持动态字段。在开启动态字段后,您可以向 Collection 中插入 Schema 中未定义的字段。这些字段和值将会以键值对的形式存放在一个名为 $meta 的保留字段中。关于动态字段的相关内容,可以参考Dynamic Field

向 Collection 中插入 Entity

在插入数据前,请按照 Schema 将数据组织成一个字典列表,每个字典代表一个 Entity,包含 Schema 中定义的所有字段。如果 Collection 启用了动态字段,每个字典还可以携带 Schema 中没有定义的字段。

本节将演示如何向使用最简建表方式创建的 Collection 中插入 Entity。通过这种方式创建的 Collection 仅有两个字段,字段名分别为 idvector。另外,该 Collection 还启用了动态字段,因此示例代码中的 Entity 均携带了一个 Schema 中未定义的字段 color

from pymilvus import MilvusClient

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]

res = client.insert(
collection_name="quick_setup",
data=data
)

print(res)

# Output
# {'insert_count': 10, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

向 Partition 中插入 Entity

您还可以向指定的 Partition 中插入 Entity。示例代码假设 Collection 中存在一个名为 partitionA 的 Partition。

data=[
{"id": 10, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 11, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 12, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 13, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 14, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 15, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 16, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 17, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 18, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 19, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
]

res = client.insert(
collection_name="quick_setup",
# highlight-next-line
partition_name="partitionA",
data=data
)

print(res)

# Output
# {'insert_count': 10, 'ids': [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]}