知识库--Milvus

引言:

本教程由以下两部分构成:

  1. 代码示例:通过实际构建Milvus知识库的代码演示,提供 hands-on 的操作体验。

  2. 代码解析:详细解释代码的每一部分,帮助读者深入理解Milvus的工作原理和实现细节。

通过这两部分的有机结合,我们将对Milvus有更为深刻和全面的认识。

代码示例

###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 MilvusClient

client.create_collection(
    collection_name="hybrid_search_collection",
    schema=schema,
    index_params=index_params
)
###step4:插入数据
from pymilvus import MilvusClient

data=[
    {"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工作簿及其工作表,第四步则是将数据插入到相应的工作表中。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值