索引作用
加速大型數據集上的查詢。
向量字段,僅只能創建一個索引。
milvus支持的向量索引類型大部分使用 近似最近鄰搜索算法。ANNS該算法的核心不局限于返回最準確的結果,而是僅搜索目標的鄰居。ANNS通過在可接受的范圍內犧牲準確性提高檢索效率。
比方,有一百條數據,其中有90條數據是滿足條件的,使用ANNS可能只會返回89條數據。如果想準確返回90條數據,就需要采用暴力搜索。
milvus索引分類
內存索引,因為是在內存中所以加載速度更快。
磁盤索引
根據實現方式分類,ANNS向量索引可以分為4類:
1.基于樹的索引,比如mysql中的索引是基于B+樹。
2.基于圖的索引
3.基于哈希的索引
4.基于量化的索引
根據數據類型,支持兩種類型的索引:
- floating-point embeddings 浮點類型,常用的索引
SCANN、IVF_FLAT、IVF_PQ、IVF_SQ8、FLAT、HNSW(效率比較高的索引算法)、ANNOY、AUTOINDEX、DISKANN
- binary embeddings
BIN_FLAT、BIN_IVF_FLAT
注意:刪掉索引前,需要現將Collection從內存中release卸載釋放掉。
使用attu圖形化工具,創建一個HNSW類型的索引
使用代碼創建一個HNSW類型的索引
from pymilvus import (connections,Collection,
)collection_name = "first_milvus"
host = "192.168.171.130"
port = 19530
username = ""
password = ""connections.connect("default", host=host, port=port, user=username, password=password)
coll = Collection(collection_name, consistency_level="Bounded", shards_num=1)from pymilvus import Collectioncollection = Collection('first_milvus')
index_params = {"index_type": "HNSW","metric_type": "L2","params": {"M": 16,"efConstruction": 60}
}
collection.create_index(field_name="embeddings",index_params=index_params,index_name="idx_em"
)
print("done")