索引作用
加速大型数据集上的查询。
向量字段,仅只能创建一个索引。
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 Collection
collection = 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")