向量数据库-Milvus快速入门

Milvus 概述

向量是神经网络模型的输出数据格式,可以有效地对信息进行编码,在知识库、语义搜索、检索增强生成(RAG)等人工智能应用中发挥着举足轻重的作用。

Milvus 是一个开源的向量数据库,适合各种规模的人工智能应用。

Milvus 是一种高性能、高扩展性的向量数据库,可在从笔记本电脑到大规模分布式系统等各种环境中高效运行。它既可以开源软件的形式提供,也可以云服务的形式提供。

Milvus 是一个开源项目,以 Apache 2.0 许可发布。大多数贡献者都是高性能计算(HPC)领域的专家,擅长构建大型系统和优化硬件感知代码。核心贡献者包括来自 Zilliz、ARM、NVIDIA、AMD、英特尔、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士。

Embeddings 和 Milvus

文本、图像和音频等非结构化数据格式各异,并带有丰富的底层语义,因此分析起来极具挑战性。为了处理这种复杂性,Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。

Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON,为您节省了维护多个数据库系统的精力。

Milvus 为何如此快速?

Milvus 从设计之初就是一个高效的向量数据库系统。在大多数情况下,Milvus 的性能是其他向量数据库的 2-5 倍。这种高性能是几个关键设计决策的结果:

硬件感知优化 :为了让 Milvus 适应各种硬件环境, 专门针对多种硬件架构和平台优化了其性能,包括 AVX512、SIMD、GPU 和 NVMe SSD。

高级搜索算法 :Milvus 支持多种内存和磁盘索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有这些算法都经过了深度优化。与 FAISS 和 HNSWLib 等流行实现相比,Milvus 的性能提高了 30%-70%。

C++ 搜索引擎向量数据库性能的 80% 以上取决于其搜索引擎。由于 C++ 语言的高性能、底层优化和高效资源管理,Milvus 将 C++ 用于这一关键组件。最重要的是,Milvus 集成了大量硬件感知代码优化,从汇编级向量到多线程并行化和调度,以充分利用硬件能力。

面向列 :Milvus 是面向列的向量数据库系统。其主要优势来自数据访问模式。在执行查询时,面向列的数据库只读取查询中涉及的特定字段,而不是整行,这大大减少了访问的数据量。此外,对基于列的数据的操作可以很容易地进行向量化,从而可以一次性在整个列中应用操作,进一步提高性能。

概念关系图(逻辑结构)

复制代码
Milvus数据库
├── Collection集合
│   ├── Partition分区
│   │   └── Entity实体
│   │       └── Fields字段(向量 + 元数据)
│   ├── Schema结构
│   └── Index索引
├── 查询操作(Search / Query)
└── 数据一致性机制

示例

1.环境准备

复制代码
pip install pymilvus

2.连接

复制代码
from pymilvus import MilvusClient
client = MilvusClient(uri='http://127.0.0.1:19530')

3.创建collection

复制代码
    fields = [
        FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
        FieldSchema(name="name", dtype=DataType.VARCHAR, max_length=64),
        FieldSchema(name="category", dtype=DataType.VARCHAR, max_length=64),
        #这里使用结巴分词 
        FieldSchema(name="description", dtype=DataType.VARCHAR, max_length=1000, enable_analyzer=True,
                    analyzer_params={"tokenizer": "jieba", "filter": ["cnalphanumonly"]}),
        # 向量维度 我这里使用openai的embedding生成的向量默认维度是1536
        # embedding_llm1.embed_documents(titles)
        FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=1536),
        # 稀疏向量字段
        FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR)
#添加的 BM25 函数,使得 Milvus 能够:自动从 title 字段提取稀疏特征;
bm25_function = Function(
    name="bm25",
    input_field_names=["title"],
    output_field_names=["sparse_vector"],
    function_type=FunctionType.BM25,
)
schema = CollectionSchema(fields=fields,functions=[bm25_function], description="商品向量集合")
client.create_collection(
        collection_name=COLLECTION_NAME,
        schema=schema,
        consistency_level="Strong", # 一致性级别
        enable_dynamic_field=True,# 动态字段 如果设为 True,Milvus 将自动接受未在 schema 中定义的新字段数据,并将其存储为 JSON 格式。
        auto_id=True # 自动生成ID。

)

定义 schema 时启用 BM25 函数,指定输入字段为 title,输出字段为 sparse_vector(稀疏向量),插入数据时只需提供原始文本,系统会自动调用 BM25 函数生成稀疏向量

BM25 是一种经典的信息检索评分函数(ranking function),用于衡量查询语句与文档的相关性。它基于词频(TF)、逆文档频率(IDF)和文档长度等因素对结果进行打分。

consistency_level是 Milvus 中用于控制 数据读写一致性 的参数,它决定了在进行查询或检索操作时,系统保证返回的数据与最新写入数据之间的一致性程度

"Strong"强一致性:每次读取都返回最新的数据,适用于对实时性要求高的场景。

"Session"会话一致性:在一个客户端连接内保证一致性,适合多次查询的连续操作。

"Bound"有界一致性:允许一定时间延迟,性能较好,适合容忍短暂延迟的场景。

"Eventually"最终一致性:不保证立即看到写入结果,性能最优,但可能读到旧数据

4.插入数据

测试数据:

复制代码
电子产品类
运动型蓝牙耳机
这款运动蓝牙耳机专为运动爱好者打造。它采用蓝牙5.2技术,连接稳定,即使在运动的过程中大幅度晃动也不会轻易断连。拥有防水防汗的特性,其外壳经过特殊工艺处理,能有效抵御汗水和雨水的侵蚀,非常适合跑步、健身、骑行等运动场景。音质上,它采用了独特的音腔设计,增强了低频效果,让节奏感强烈的运动音乐更加带感。耳机采用挂耳式的人体工学设计,贴合耳部轮廓,硅胶材质的耳挂柔软有弹性,长时间运动佩戴也不会觉得耳朵酸痛,并且稳固性极佳,运动时不会掉落。在续航方面表现不错,一次充满电可以连续使用7小时,满足一场酣畅淋漓的运动所需。
电子产品类
降噪蓝牙耳机
这款降噪蓝牙耳机主打主动降噪功能。采用先进的蓝牙5.3技术,连接稳定又迅速。它配备了专业的降噪芯片,能够精准识别并过滤外界环境噪音,比如飞机的轰鸣声、地铁的嘈杂声、办公室的键盘敲击声等,最高可降低35dB的噪音,让你沉浸在纯净的音乐世界中。音质方面,它采用了高品质的动圈单元,能够呈现出丰富细腻的音乐细节,高音清亮,中音饱满,低音深沉有力。耳机的耳罩采用了柔软的蛋白皮材质,内部填充了高密度海绵,贴合耳部,佩戴起来非常舒适,长时间使用也不会有压迫感。续航能力也相当出色,开启降噪功能后可连续使用6小时,关闭降噪功能则能使用长达9小时。
电子产品类
骨传导蓝牙耳机
这款骨传导蓝牙耳机采用了创新的骨传导技术,无需堵塞耳道就能传递声音。它采用蓝牙5.0技术,连接稳定,并且具备良好的兼容性,能与各种智能设备轻松配对。由于不堵塞耳道,在听音乐的同时还能感知周围环境的声音,保障了使用时的安全性,适合户外运动、骑行、跑步等场景。音质上,它虽然不能像传统耳机那样呈现极致的音质效果,但也能满足日常基本的听音乐和通话需求。耳机的机身采用了硅胶材质,柔软有弹性,可随意弯曲,佩戴起来十分轻便,仅重28克,并且贴合耳部,运动时不易掉落。续航方面,一次充满电可连续使用5小时,小巧轻便的充电仓还能为耳机额外充电2 - 3次。
电子产品类
儿童蓝牙耳机
这款儿童蓝牙耳机专为儿童设计。采用蓝牙5.0技术,连接稳定,操作简单,方便儿童使用。它特别注重儿童的听力保护,内置了音量限制功能,最大音量不会超过85dB,有效避免音量过大对儿童听力造成损伤。音质方面,采用了适合儿童听觉特点的音频调校,声音清晰、柔和,让孩子们能听到纯真的音乐。耳机的头带采用了柔软的硅胶材质,可调节长度,能适应不同年龄段儿童的头围大小,佩戴舒适且不会给孩子的头部造成压迫感。外观设计十分可爱,有多种卡通造型和鲜艳的颜色可供选择,深受孩子们的喜爱。续航能力也不错,一次充满电可连续使用4小时,满足孩子日常听故事、听儿歌的需求。
电子产品类
商务蓝牙耳机
这款商务蓝牙耳机是商务人士的理想选择。它采用蓝牙5.3技术,连接稳定且低延迟,确保在商务通话中不会出现声音卡顿或延迟的情况。配备了高清麦克风和智能降噪算法,能够有效过滤周围环境噪音,在嘈杂的办公室、咖啡馆等场所也能保证清晰的通话质量。音质方面,声音清晰、准确,能让对方清楚地听到你的表达。耳机的设计简约时尚,采用了入耳式设计,小巧轻便,便于携带。耳帽采用了亲肤的硅胶材质,佩戴舒适,长时间通话也不会感到不适。续航能力较强,一次充满电可连续使用7小时,充电仓还能为耳机补充电量,满足一天的商务使用需求。
电子产品类
智能无线蓝牙耳机
这款蓝牙耳机采用先进的蓝牙5.3技术,连接稳定且快速。拥有高清音质,能够呈现丰富的音乐细节。人体工学设计,佩戴舒适,长时间使用也不会有不适感。续航能力出色,一次充满电可连续使用8小时以上。
电子产品类
便携式移动硬盘
大容量便携式移动硬盘,拥有2TB的存储空间,可轻松存储大量的照片、视频、文件等。外观小巧精致,便于携带。采用USB3.2高速接口,数据传输速度快,能让你快速备份和读取数据。
电子产品类
高清智能摄像头
具备4K超高清分辨率的智能摄像头,画面清晰细腻。支持日夜切换功能,即使在夜间也能清晰捕捉画面。内置智能感应系统,当检测到异常活动时会及时推送警报信息到你的手机。
家居用品类
多功能养生壶
这款养生壶集煮茶、煲汤、炖燕窝、煮蛋等多种功能于一体。采用优质的玻璃材质,耐高温且安全无毒。具备精准的温控系统,能根据不同的食材和需求调节合适的温度和时间。
家居用品类
智能扫地机器人
智能扫地机器人拥有先进的激光导航技术,能够快速准确地绘制家居地图,规划清扫路线。具备多种清扫模式,如自动清扫、定点清扫、沿边清扫等。还能通过手机APP远程控制,让你随时随地轻松清洁家居。
家居用品类
记忆棉床垫
记忆棉床垫采用高品质的记忆棉材质,能够根据人体的曲线和压力自动调整形状,提供精准的支撑,有效缓解身体压力。透气性好,能保持睡眠环境的干爽舒适。同时,它还具有静音效果,让你享受安静的睡眠。
服装配饰类
纯棉休闲T恤
采用100%纯棉面料,柔软舒适,透气性极佳。简约的设计风格,经典的圆领款式,适合各种场合穿着。多种颜色可选,满足你的不同搭配需求。
服装配饰类
真皮男士钱包
这款男士钱包采用优质的头层牛皮制作,质感柔软且耐用。内部设计合理,有多个卡槽、钞位和零钱袋,方便分类存放物品。精致的缝线工艺和简约的外观设计,彰显男士的沉稳与大气。
服装配饰类
时尚女士手链
时尚女士手链由高品质的水晶和合金制成,外观闪耀夺目。独特的设计款式,融合了时尚与优雅的元素,能为你的手腕增添一份迷人的魅力。是送给女性朋友的绝佳礼物。
服装配饰类
防风保暖围巾
围巾采用优质的羊毛材质,保暖性能极佳。表面经过特殊处理,具有防风功能,能有效抵御寒冷的天气。宽大的尺寸,可随意搭配不同的服装风格,让你在寒冷的季节也能保持时尚。
美妆护肤类
美白保湿面膜
这款面膜富含多种美白和保湿成分,如熊果苷、透明质酸等。能够深入肌肤底层,抑制黑色素的生成,同时为肌肤补充大量水分,让你的肌肤变得白皙、水润、有光泽。面膜纸采用轻薄透气的材质,贴合肌肤,使用起来非常舒适。
美妆护肤类
控油祛痘洗面奶
专为油性痘痘肌设计的洗面奶,具有强大的控油和祛痘功效。含有水杨酸、茶树精油等成分,能够深层清洁毛孔,去除多余的油脂和污垢,预防痘痘的产生。洗后肌肤清爽不紧绷,保持水油平衡。
美妆护肤类
持久定妆粉饼
定妆粉饼具有细腻的粉质,能够轻松贴合肌肤,打造出光滑、哑光的妆效。持久的定妆效果,能让妆容一整天都保持完美状态,不易脱妆、花妆。添加了护肤成分,在定妆的同时还能滋养肌肤。
母婴用品类
婴儿纯棉连体衣
婴儿连体衣采用天然纯棉面料,柔软亲肤,对宝宝的皮肤无刺激。宽松的版型设计,让宝宝活动自如。精致的包边工艺,防止刮伤宝宝娇嫩的肌肤。多种可爱的图案和颜色可供选择。
母婴用品类
儿童安全座椅
儿童安全座椅符合严格的安全标准,采用高强度的材料制作,能够有效保护儿童在乘车过程中的安全。人体工学设计,让宝宝乘坐舒适。可调节的座椅角度和头枕高度,适合不同年龄段的儿童使用。
母婴用品类
婴儿润肤霜
专为婴儿娇嫩肌肤设计的润肤霜,含有天然的植物精华,如橄榄油、芦荟等。能够滋润宝宝的肌肤,防止肌肤干燥、皲裂。温和无刺激,经过严格的安全性检测,让妈妈们放心使用。
食品饮料类
纯牛奶
这款纯牛奶源自优质牧场,采用新鲜的生牛乳制作而成。富含丰富的蛋白质、钙等营养成分,口感醇厚,奶香浓郁。经过严格的质量检测,安全有保障,是全家补充营养的理想选择。
食品饮料类
坚果礼盒
坚果礼盒内包含多种美味的坚果,如核桃、杏仁、腰果、巴旦木等。这些坚果均经过精心挑选,颗粒饱满,口感香脆。富含不饱和脂肪酸、维生素和矿物质等营养成分,健康又美味。
食品饮料类
水果茶包
水果茶包由多种新鲜水果和花草混合而成,如草莓、柠檬、玫瑰、薄荷等。口感清新酸甜,具有丰富的果香和花香。富含维生素C等营养成分,有美容养颜、提神醒脑的功效。可直接用开水冲泡,方便快捷。
食品饮料类
手工巧克力
手工制作的巧克力,选用高品质的可可豆,经过精细的加工工艺制作而成。口感丝滑醇厚,有多种口味可供选择,如牛奶巧克力、黑巧克力、榛果巧克力等。精美的包装,是送给亲朋好友的甜蜜礼物。

代码:

复制代码
goods = []
    with open("../datas/goods.txt", "r", encoding="utf-8") as f:
        while True:
            category = f.readline().strip()
            if category == "":
                break
            name = f.readline().strip()
            description = f.readline().strip()
            goods.append({"category": category, "name": name, "description": description})

    vectors = embedding_llm2.embed_documents([item["description"] for item in goods])

    # 修改插入数据格式,使其符合schema定义
    data_to_insert = []
    for i in range(len(goods)):
        data_to_insert.append({
            "category": goods[i]["category"],
            "name": goods[i]["name"],
            "description": goods[i]["description"],
            "vector": vectors[i]
        })

    # 插入数据
    res = client.insert(collection_name=COLLECTION_NAME, data=data_to_insert)
    print(res)

5.创建索引

复制代码
# 创建索引参数对象
    index_params = client.prepare_index_params()

    # 添加一个索引,指定字段名称、索引类型、度量类型和参数
    index_params.add_index(
        field_name="vector",
        index_type="HNSW",
        metric_type="IP",
        params={"M": 16, "efConstruction": 64}
    )

    # 为 sparse_vector 字段添加 SPARSE_INVERTED_INDEX 索引
    index_params.add_index(
        field_name="sparse_vector",
        index_type="SPARSE_INVERTED_INDEX",
        metric_type="BM25",
        params={
            "inverted_index_algo": "DAAT_MAXSCORE",
            "bm25_k1": 1.2,
            "bm25_b": 0.75
        }

    )

    # 创建索引
    client.create_index(COLLECTION_NAME, index_params)

index_type 和 metric_type

在 Milvus 中,index_type 和 metric_type 是创建索引时非常关键的两个参数,它们分别用于指定索引类型和距离度量方式。以下是详细的选项说明:

index_type 索引类型(常用)

📌 推荐组合:对于稠密向量,推荐使用 HNSW + IP;对于稀疏向量,推荐 SPARSE_INVERTED_INDEX。

metric_type 距离度量类型

注意:某些索引类型只支持特定的 metric_type,例如 HNSW 支持 IP、L2,而 SPARSE_INVERTED_INDEX 只支持 BM25(需配合稀疏向量使用)。

推荐配置建议(基于场景)

M 和 efConstruction

在 Milvus 中使用 HNSW(Hierarchical Navigable Small World)索引时,参数 M 和 efConstruction 是两个关键的构建参数,它们直接影响索引的质量

M: 图结构中每个节点连接的邻居数。默认值:16 建议值:5 ~ 48, M 值越大,图结构越密集,检索精度越高,相应的占用内存也越大 构建时间越长

M=16:适用于大多数场景,构建速度快、内存占用低。

M=32~48:适合对精度要求高、资源充足的场景。

efConstruction: 构建索引时搜索候选节点的数量。默认值:64 建议值10 ~ 512,efConstruction越大,索引图质量越高,查询效果越好。相应的构建时间越长,efConstruction对内存影响较小

efConstruction=64:快速构建,适合测试或小数据集。

efConstruction=128~256:高质量索引,适合生产环境。

稠密向量和稀疏向量

稠密向量

稠密向量是一个几乎每个维度都有非零值的固定长度向量,通常用于表示语义信息。

数据类型(Milvus 中)FLOAT_VECTOR用于存储稠密向量。必须指定维度(dim),例如 dim=1536。

特征:

适用模型与场景:

索引推荐:HNSW、IVF_FLAT、IVF_PQ、RHNSW_FLAT

稀疏向量

稀疏向量是一种大多数维度为零,只有少数位置有非零值的向量,通常用于关键词或特征计数。

数据类型(Milvus 中)SPARSE_FLOAT_VECTOR用于存储稀疏向量,使用字典格式 {dimension_index: value} 表示

适用模型与场景

如何选择

6.搜索类型

Milvus 支持各种类型的搜索功能,以满足不同用例的需求:

  • ANN 搜索:查找最接近查询向量的前 K 个向量。

  • 过滤搜索:在指定的过滤条件下执行 ANN 搜索。

  • 范围搜索:查找查询向量指定半径范围内的向量。

  • 混合搜索:基于多个向量场进行 ANN 搜索。

  • 全文搜索:基于 BM25 的全文搜索。

  • Rerankers:根据附加标准或辅助算法调整搜索结果顺序,完善初始 ANN 搜索结果。

  • 获取:根据主键检索数据。

  • 查询使用特定表达式检索数据。

向量搜索案例:

复制代码
    #将集合加载到内存中,以便进行查询操作。
    client.load_collection(COLLECTION_NAME)
    search = client.search(
        collection_name=COLLECTION_NAME,
        data=[embedding_llm2.embed_query("蓝牙耳机")],  #embedding进行向量化
        anns_field="vector",  # 指定要检索的向量字段
        filter="category == '电子产品类'", #过滤条件
        output_fields=["name", "category", "description"], #输出字段
        limit=3 #返回top3
    )

bm25全文检索:

复制代码
    #将集合加载到内存中,以便进行查询操作。
    client.load_collection(COLLECTION_NAME)
    keyword_query = "蓝牙耳机"
    #'drop_ratio_search': 这是 Milvus 中的一个参数,用于设置在全文检索(基于稀疏向量)过程中可以忽略的低权重特征比例。这里设置为 0.8 表示在搜索过程中会忽略掉 80% 的低权重特征,以提升搜索效率。
    search_params = {
        'params': {'drop_ratio_search': 0.8},
    }
    search = client.search(
        collection_name=COLLECTION_NAME,
        data=[keyword_query], # 搜索文本数据
        anns_field='sparse_vector', # 确保指定查询的稀疏向量字段
        output_fields=['description'],  # 输出字段
        limit=3,
        search_params=search_params
    )
    print(search)

什么是混合检索?

混合检索(Hybrid Search)是一种结合全文检索(如 BM25)和向量相似度检索(如 ANN,近似最近邻搜索)的技术,通过融合两者的结果提升检索的准确性和覆盖率。

BM25(全文匹配):适用于关键词匹配,捕捉显式语义。

ANN(向量匹配):适用于语义理解,捕捉隐式相关性。

混合检索在实际应用中可以显著提高召回率和排序质量,尤其适合处理复杂查询或模糊语义场景。
混合检索的核心流程

数据建模:

存储原始文本字段(用于 BM25)

存储该文本的 embedding 向量(用于 ANN)

索引构建:

对文本字段建立稀疏索引(SPARSE_INVERTED_INDEX + BM25)

对向量字段建立稠密索引(如 HNSW, IVF_FLAT)

检索阶段:

分别执行 BM25 和 ANN 查询

使用加权评分或排序融合算法(如 Reciprocal Rank Fusion, RRF)合并结果

混合搜索案例

复制代码
    #向量搜索
    vector_search_params = {
        "data": [embedding_llm2.embed_query("蓝牙耳机")],
        "anns_field": "vector",
        #nprobe: 表示在执行 HNSW 索引搜索时,从索引中探测(访问)的最近邻子空间(neighborhood cells)的数量
        "param": {"nprobe": 10},
        "limit": 3
    }
    vector_search_result = AnnSearchRequest(**vector_search_params)
    # 全文搜索
    full_text_params = {
        "data": ["蓝牙耳机"],
        "anns_field": "sparse_vector",
        #drop_ratio_search: 表示在执行基于 SPARSE_FLOAT_VECTOR 字段的全文搜索时,忽略掉低权重的稀疏特征项的比例。设置为0.2
        #意味着在搜索过程中会忽略掉权重最低的20 % 的特征项,从而加快查询速度,但可能会略微降低结果的相关性。
        "param": {"drop_ratio_search": 0.2},
        "limit": 3
    }
    full_text_result = AnnSearchRequest(**full_text_params)
    # 初始化 配置 Rerankers 策略
    ranker = RRFRanker(100)
    reqs = [vector_search_result, full_text_result]
    #混合搜索
    res = client.hybrid_search(
        collection_name=COLLECTION_NAME,
        reqs=reqs,
        ranker=ranker,
        limit=3,
        output_fields=["name", "category", "description"]  # 同样指定输出字段
    )
    print("向量搜索请求对象:", vector_search_result)
    print("全文搜索请求对象:", full_text_result)
    print("混合搜索结果", res)

AnnSearchRequest 是 pymilvus 提供的一个类,用于构建近似最近邻搜索(Approximate Nearest Neighbor Search)的请求对象。它主要用于 Milvus 的混合搜索(hybrid search)场景中,将多个搜索请求组合在一起。

配置 Rerankers 策略

要对 ANN 搜索结果集进行合并和重新排序,选择适当的重新排序策略至关重要。Milvus 提供两种重排策略:

  • 加权排名:如果结果需要强调某个向量场,请使用该策略。WeightedRanker 可以为某些向量场赋予更大的权重,使其更加突出。

  • RRFRanker(互易排名融合排名器):在不需要特别强调的情况下选择此策略。RRFRanker 能有效平衡每个向量场的重要性。

7.删除文档

复制代码
res = client.delete(collection_name=COLLECTION_NAME, ids=[0, 2])

res = client.delete(
    collection_name=COLLECTION_NAME,
    filter="category == '电子产品类'",
)

8.删除集合

复制代码
client.drop_collection(collection_name=COLLECTION_NAME)
相关推荐
小乌龟不会飞13 分钟前
Ubuntu 安装 etcd 与 etcd-cpp-apiv3
数据库·etcd
knqiufan6 小时前
深度解析影响 RAG 召回率的四大支柱——模型、数据、索引与检索
llm·milvus·向量数据库·rag
计算机毕设定制辅导-无忧学长8 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
程序员柳8 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、9 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机9 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10249 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
祁思妙想10 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人10 小时前
1.MySQL之如何定位慢查询
数据库·mysql