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"
)