🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 使用者指南

管理模式

本主題介紹 Milvus 的模式。模式用於定義集合的屬性和其中的欄位。

欄位模式

欄位模式是欄位的邏輯定義。在定義集合模式管理集合之前,首先需要定義它。

Milvus 在一個集合中只支援一個主鍵欄位。

欄位模式屬性

屬性 說明 註解
name 要建立的資料集中欄位的名稱 資料類型:
必填
dtype 欄位的資料類型 必須填寫
description 欄位的描述 資料類型:
可選
is_primary 是否設定欄位為主索引欄位 資料類型: 布林 ( 或 ):布林 (truefalse)。
主鍵欄位必須填寫
auto_id (主鍵欄位必須使用) 開啟或關閉 ID(主鍵)自動分配的開關。 TrueFalse
max_length (對於 VARCHAR 欄位必須使用) 允許插入字串的最大位元組長度。請注意,多位元組字元(例如 Unicode 字元)可能佔用超過一個位元組,因此請確保插入字串的位元組長度不超過指定的限制。 [1, 65,535]
dim 向量的尺寸 資料類型:
密集向量欄位必須填寫。對於稀疏向量場,請省略。
is_partition_key 此欄位是否為分割鍵欄位。 資料類型:Boolean (truefalse)。

建立欄位模式

為了降低資料插入的複雜性,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: 布林 (truefalse)
    • 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:一種新的資料類型

  • 向量欄位支援:

    • 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 (truefalse)。
可選,預設為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)
  • 您可以使用shards_num 定義分片號碼。
  • 您可以在using 中指定別名,以定義要在其上建立集合的 Milvus 伺服器。
  • 如果您需要實作以分割鑰匙為基礎的多租戶,您可以透過在欄位上設定is_partition_keyTrue 來啟用欄位上的分割鑰匙功能。
  • 如果需要啟用動態欄位,您可以透過在集合模式中將enable_dynamic_field 設定為True 來啟用動態模式。


您也可以使用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
    )

下一步

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?