本篇為您介紹如何在Milvus中為向量欄位建立索引,以實現對向量中繼資料的有效過濾。向量索引專註於通過先進的索引結構和演算法(如IVF、HNSW等),有效壓縮向量空間並加速在海量資料中定位與查詢向量最相似的資料點,極大地提升了諸如Image Recognition、語音檢索、推薦系統等應用情境中的召回率與響應速度。
背景資訊
Milvus支援多種索引類型以實現高效的相似性檢索,並提供了三種度量方式來計算向量之間的距離,包括Cosine Similarity(COSINE)、Euclidean Distance(L2)和Inner Product(IP)。建議在經常用於查詢的向量欄位和標量欄位上建立索引,以最佳化檢索效能。
前提條件
已在本地用戶端成功安裝了PyMilvus庫,並將其更新至當前最新版本。
如果您尚未在本地用戶端安裝PyMilvus庫,或者需要將其更新至當前最新版本,您可以執行以下命令。
pip install --upgrade pymilvus已建立Milvus執行個體,請參見詳情快速建立Milvus執行個體。
前期準備
在索引管理之前,您需要先建立好Collection。在建立Collection時,如果在請求中明確指定建立並立即載入索引(index),您需要同時聲明向量欄位的維度和度量類型(dimension與metric_type)或提供與索引相關的參數。以下程式碼片段並未包含這些參數,因此建立的collection將不具備索引,且不會被自動載入至記憶體。
聲明向量欄位的維度和metric_type屬性。
聲明schema和index相關參數。
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # Milvus執行個體的公網地址。
token="<yourUsername>:<yourPassword>", # 登入Milvus執行個體的使用者名稱和密碼。
db_name="default" # 待串連的資料庫名稱,本文樣本為預設的default。
)
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vec", datatype=DataType.FLOAT_VECTOR, dim=5)
client.create_collection(
collection_name="<yourCollectioNname>",
schema=schema,
)
建立索引
您可以調用create_index函數指定所需的index參數來建立索引。
index_params = MilvusClient.prepare_index_params()
# 定義索引參數。
index_params.add_index(
field_name="vec", # 指定向量欄位名,例如"vec"。
metric_type="L2", # 設定度量類型,例如L2。
index_type="IVF_PQ", # 設定索引類型,例如IVF_PQ。
index_name="vector_index" # 根據實際情況設定索引名稱。
)
# 建立索引。
client.create_index(
collection_name="<yourCollectionname>",
index_params=index_params
)
查看索引
res = client.describe_index(
collection_name="<yourCollectionname>",
index_name="<yourIndexname>"
)
print(res)
刪除索引
client.drop_index(
collection_name="<yourCollectionname>",
index_name="<yourIndexname>"
)