引言:
本教程由以下两部分构成:
-
代码示例:通过实际构建Milvus知识库的代码演示,提供 hands-on 的操作体验。
-
代码解析:详细解释代码的每一部分,帮助读者深入理解Milvus的工作原理和实现细节。
通过这两部分的有机结合,我们将对Milvus有更为深刻和全面的认识。
代码示例
python">###step1: 创建集合schema用来保存数据做准备
from pymilvus import (MilvusClient, DataType
)
client = MilvusClient(uri="http://localhost:19530",token="root:Milvus"
)
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="text", datatype=DataType.VARCHAR, max_length=1000)
schema.add_field(field_name="sparse", datatype=DataType.SPARSE_FLOAT_VECTOR)
schema.add_field(field_name="dense", datatype=DataType.FLOAT_VECTOR, dim=5)
###step2:创建索引
from pymilvus import MilvusClient
index_params = client.prepare_index_params()
index_params.add_index(field_name="dense",index_name="dense_index",index_type="IVF_FLAT",metric_type="IP",params={"nlist": 128},
)
index_params.add_index(field_name="sparse",index_name="sparse_index",index_type="SPARSE_INVERTED_INDEX", metric_type="IP", params={"inverted_index_algo": "DAAT_MAXSCORE"},
)
###step3:创建collections
from pymilvus import MilvusClientclient.create_collection(collection_name="hybrid_search_collection",schema=schema,index_params=index_params
)
###step4:插入数据
from pymilvus import MilvusClientdata=[{"id": 0, "text": "Artificial intelligence was founded as an academic discipline in 1956.", "sparse":{9637: 0.30856525997853057, 4399: 0.19771651149001523, ...}, "dense": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, ...]},{"id": 1, "text": "Alan Turing was the first person to conduct substantial research in AI.", "sparse":{6959: 0.31025067641541815, 1729: 0.8265339135915016, ...}, "dense": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, ...]},{"id": 2, "text": "Born in Maida Vale, London, Turing was raised in southern England.", "sparse":{1220: 0.15303302147479103, 7335: 0.9436728846033107, ...}, "dense": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, ...]}res = client.insert(collection_name="hybrid_search_collection",data=data
)
解释代码
概念阐释:Schema、Field、Collections、Index
以Excel表格为例,我们可以这样理解这些概念:
-
Collections:相当于一个完整的Excel工作簿,其中包含了多个工作表(如Sheet1、Sheet2等)。
-
Schema:类似于Excel中的一个特定工作表,假设为Sheet1。在此例中,Sheet1的名称由代码设定为“hybrid_search_collection”。
-
Field:代表工作表中的每一列。在上述代码中,Sheet1包含四列,每一列都规定了数据的类型,数据必须严格按照这些类型进行存储。
Index的含义
Index在系统中扮演着关键角色。Index的类型决定了Milvus在进行数据检索时所采用的算法。
-
例如,近似最近邻(ANN)检索有多种算法可供选择,如IVF_FLAT和HNSW。代码中设置的Index类型将决定后续使用的具体算法。
-
具体而言,IVF_FLAT或HNSW等Index类型会对数据进行类似于聚类的预处理,从而优化检索效率。在后续的检索模块中,我们将对ANN和KNN算法进行比较分析,将会有更直观的体现。
代码的整体逻辑
代码的前三步相当于创建一个Excel工作簿及其工作表,第四步则是将数据插入到相应的工作表中。