全部產品
Search
文件中心

Vector Retrieval Service for Milvus:管理Collections

更新時間:Sep 23, 2025

Milvus中的Collections類似於關係型資料庫中的“表”,是組織和管理向量資料以及相關標量中繼資料的核心單元。通過靈活配置索引、分區和分區,您能夠根據實際需求定製化資料處理流程,實現從資料攝入、儲存、查詢到分析的全鏈路解決方案。

前提條件

  • 已在本地用戶端成功安裝了PyMilvus庫,並將其更新至當前最新版本。

    如果您尚未在本地用戶端安裝PyMilvus庫,或者需要將其更新至當前最新版本,您可以執行以下命令。

    pip install --upgrade pymilvus
  • 已建立Milvus執行個體,請參見詳情快速建立Milvus執行個體

建立Collection

快速建立Collection

您可以通過指定Collection的名稱和向量維度來快速建立Collection。

from pymilvus import MilvusClient

# 建立Milvus Client。
client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",  # Milvus執行個體的公網地址。
    token="<yourUsername>:<yourPassword>",  # 登入Milvus執行個體的使用者名稱和密碼。
    db_name="default"  # 待串連的資料庫名稱,本文樣本為預設的default。
)

# 建立名稱為milvus_collection的Collection。
client.create_collection(
    collection_name="milvus_collection",
    dimension=5
)

res = client.get_load_state(
    collection_name="milvus_collection"
)
# 返回Collection當前的載入狀態。
print(res)

運行此代碼可建立一個僅含有兩個欄位“id”(主鍵)和“vector”(向量欄位)的Collection,同時預設啟用“auto_id”和“enable_dynamic_field”屬性。

  • auto_id: 當啟用此屬性後,系統將自動為每條記錄分配一個自增的主索引值,無需手動設定主鍵。

  • enable_dynamic_field: 啟用此屬性後,除已定義的“id”和“vector”欄位外,其他任意新欄位都會被視為動態欄位,並以索引值對形式儲存於名為$meta的特殊欄位中。這一特性允許插入尚未定義的新欄位。

通過上述設定,可以在不預先定義所有欄位的情況下,靈活地插入和管理資料。

自訂建立Collection

自訂建立Collection時,您可以根據需要指定schema和index參數。

from pymilvus import MilvusClient, DataType, time

# 建立Milvus Client。
client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",  # Milvus執行個體的公網地址。
    token="<yourUsername>:<yourPassword>",  # 登入Milvus執行個體的使用者名稱和密碼。
    db_name="default"  # 待串連的資料庫名稱,本文樣本為預設的default。
)

# 建立Schema。
schema = MilvusClient.create_schema(
    auto_id=False,  # 禁用ID自動產生。
    enable_dynamic_field=True,  # 支援動態欄位。
)

# 添加schema欄位
# 添加名為test_id的欄位,資料類型為INT64,表示一個整數類型的主鍵欄位。
schema.add_field(field_name="test_id", datatype=DataType.INT64, is_primary=True)
# 添加名為test_vector的欄位,資料類型為FLOAT_VECTOR,dim(維度)為768。
schema.add_field(field_name="test_vector", datatype=DataType.FLOAT_VECTOR, dim=768)

# 定義index參數。
index_params = client.prepare_index_params()

# 添加index參數。
index_params.add_index(
    field_name="test_id",  # 設定索引名稱。
    index_type="STL_SORT"  # 設定索引類型。
)


index_params.add_index(
    field_name="test_vector",  # 設定索引名稱。
    index_type="IVF_SQ8",      # 設定索引類型。
    metric_type="L2",          # 設定度量類型,例如L2。
    params={"nlist": 128}
)
# 建立collection時載入index。
client.create_collection(
    collection_name="milvus_collection",  # 建立名稱為milvus_collection的Collection。
    schema=schema,
    index_params=index_params
)

time.sleep(5)

res = client.get_load_state(
    collection_name="milvus_collection"
)

print(res)

您也可以將collection和index分開建立,程式碼範例如下所示。

# 建立名稱為milvus_collection1的Collection。
client.create_collection(
    collection_name="milvus_collection1",
    schema=schema,
)
# 查詢milvus_collection1的載入狀態。
res = client.get_load_state(
    collection_name="milvus_collection1"
)

print(res)
# 為milvus_collection1建立索引。
client.create_index(
    collection_name="milvus_collection1",
    index_params=index_params
)
# 查詢建立索引後milvus_collection1的載入狀態。
res = client.get_load_state(
    collection_name="milvus_collection1"
)

print(res)

查看Collection

  • 查看Collection明細。

    res = client.describe_collection(collection_name="milvus_collection")
    
    print(res)
    
  • 查看當前Database下的所有Collections。

    res = client.list_collections()
    
    print(res)
    

載入和卸載Collection

在對Collection進行載入操作時,Milvus會同步將該Collection關聯的索引檔案載入記憶體。反之,當執行Collection的卸載操作時,Milvus會將其索引檔案從記憶體中移除。為了確保搜尋操作的正常進行,您必須確保在對Collection進行檢索時,該Collection已處於載入狀態。

載入Collection

client.load_collection(
    collection_name="milvus_collection"
)

res = client.get_load_state(
    collection_name="milvus_collection"
)

print(res)

卸載Collection

client.release_collection(
    collection_name="milvus_collection"
)

res = client.get_load_state(
    collection_name="milvus_collection"
)

print(res)

刪除Collection

client.drop_collection(
    collection_name="milvus_collection"
)

client.drop_collection(
    collection_name="milvus_collection1"
)