管理模式
本主題介紹 Milvus 的模式。模式用於定義集合的屬性和其中的欄位。
欄位模式
欄位模式是欄位的邏輯定義。在定義集合模式和管理集合之前,首先需要定義它。
Milvus 在一個集合中只支援一個主鍵欄位。
欄位模式屬性
屬性 | 說明 | 註解 |
---|---|---|
name |
要建立的資料集中欄位的名稱 | 資料類型: 必填 |
dtype |
欄位的資料類型 | 必須填寫 |
description |
欄位的描述 | 資料類型: 可選 |
is_primary |
是否設定欄位為主索引欄位 | 資料類型: 布林 ( 或 ):布林 (true 或false )。主鍵欄位必須填寫 |
auto_id (主鍵欄位必須使用) |
開啟或關閉 ID(主鍵)自動分配的開關。 | True 或False |
max_length (對於 VARCHAR 欄位必須使用) |
允許插入字串的最大位元組長度。請注意,多位元組字元(例如 Unicode 字元)可能佔用超過一個位元組,因此請確保插入字串的位元組長度不超過指定的限制。 | [1, 65,535] |
dim |
向量的尺寸 | 資料類型: 密集向量欄位必須填寫。對於稀疏向量場,請省略。 |
is_partition_key |
此欄位是否為分割鍵欄位。 | 資料類型:Boolean (true 或false )。 |
建立欄位模式
為了降低資料插入的複雜性,Milvus 允許您在建立欄位模式時,為每個標量欄位指定預設值,但不包括主鍵欄位。這表示,如果您在插入資料時讓欄位為空,您為這個欄位指定的預設值就會適用。
建立常規欄位模式:
from pymilvus import DataType, FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
建立具有預設欄位值的欄位模式:
from pymilvus import DataType, FieldSchema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
# configure default value `25` for field `age`
FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]
支援的資料類型
DataType
定義欄位包含的資料類型。不同的欄位支援不同的資料類型。
主鍵欄位支援
- INT64: numpy.int64
- varchar: varchar
Scalar 欄位支援
- BOOL: 布林 (
true
或false
) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT: numpy.float32
- DOUBLE: numpy.double
- varchar: varchar
- JSON:JSON
- Array: 陣列陣列
JSON 作為一種複合資料類型是可用的。JSON 欄位由鍵值對組成。每個 key 是字串,而值可以是數字、字串、布林值、陣列或列表。如需詳細資訊,請參閱JSON:一種新的資料類型。
- BOOL: 布林 (
向量欄位支援:
- BINARY_VECTOR: 以 0 和 1 的序列儲存二進位資料,用於影像處理和資訊檢索中的精簡特徵表示。
- FLOAT_VECTOR: 儲存 32 位元浮點數,常用於科學計算和機器學習中表示實數。
- FLOAT16_VECTOR: 儲存 16 位元半精度浮點數,用於深度學習和 GPU 運算,以提高記憶體和頻寬效率。
- BFLOAT16_VECTOR: 儲存 16 位元浮點數,精確度降低,但指數範圍與 Float32 相同,常用於深度學習,可降低記憶體和計算需求,但不會顯著影響精確度。
- SPARSE_FLOAT_VECTOR: 儲存非零元素清單及其對應的索引,用於表示稀疏向量。如需詳細資訊,請參閱稀疏向量。
Milvus 支援集合中的多重向量場。如需詳細資訊,請參閱混合搜尋。
集合模式
集合模式是集合的邏輯定義。通常在定義集合模式和管理集合之前,您需要先定義欄位模式。
集合模式屬性
屬性 | 說明 | 註解 |
---|---|---|
field |
要建立的集合中的欄位 | 必須填寫 |
description |
集合的描述 | 資料類型: 可選 |
partition_key_field |
設計作為分割區金鑰的欄位名稱。 | 資料類型:字串: 可選 |
enable_dynamic_field |
是否啟用動態模式 | 資料類型:Boolean (true 或false )。可選,預設為 False 。關於動態模式的詳細資訊,請參閱動態模式和管理集合的使用者指南。 |
建立集合模式
在定義集合模式之前,先定義欄位模式。
from pymilvus import DataType, FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
# Set enable_dynamic_field to True if you need to use dynamic fields.
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")
使用指定的模式建立一個集合:
from pymilvus import Collection, connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
您也可以使用Collection.construct_from_dataframe
, 自動從 DataFrame 產生集合模式並建立集合。
from pymilvus import Collection
import pandas as pd
df = pd.DataFrame({
"id": [i for i in range(nb)],
"age": [random.randint(20, 40) for i in range(nb)],
"embedding": [[random.random() for _ in range(dim)] for _ in range(nb)],
"position": "test_pos"
})
collection, ins_res = Collection.construct_from_dataframe(
'my_collection',
df,
primary_field='id',
auto_id=False
)