Milvus知识

一. Milvus多租户方案

Milvus 支持四个级别的多租户:数据库、Collection、Partition 和Partition Key。

数据库 : 最多64个数据库(64个租户)
Collections :每个 Collections 拥有自己的 Schema,同一个数据库下最多可容纳 65,536 个 Collection,Collection相当于表
Partition : 每个 Collections最多1,024 个分区,默认为default分区,可以crud分区,将实体插入分区,指定collection_name和partition_name:
Partition Key:如果指定一个,标量字段作为 Partition Key 时,Milvus会自定在Collection 中创建 16 个Partition 分区。还可以指定分区数量num_partitions

二. 过期时间

可以在Collections 级别设置TTL过期时间,过期的实体不会被搜索到,但会默认在内存在保留24个小时.
以秒为单位的整数

三. Milvus 提供四种不同 GuaranteeTs 的一致性级别。

对一致性要求较高,设置为强(有延迟),希望能快速返回的设置小点。

强:使用最新的时间戳作为 GuaranteeTs,查询节点必须等到服务时间满足 GuaranteeTs 后才能执行搜索请求。
会话:客户端插入数据的最新时间点被用作 GuaranteeTs,这样查询节点就能对客户端插入的所有数据执行搜索。
有限制的停滞(默认的):GuranteeTs 设置为早于最新时间戳的时间点,以便查询节点在执行搜索时能容忍一定的数据丢失。
最终:GuaranteeTs 设置为极小值(如 1),以避免一致性检查,这样查询节点就可以立即对所有批次数据执行搜索请求。

在这里插入图片描述

四. 常见的相识度算法

Milvus 支持这些类型的相似性度量:欧氏距离 (L2)、内积 (IP)、余弦相似度 (COSINE)和BM25 (专门为稀疏向量的全文检索而设计)
在这里插入图片描述

五. 相似性搜索分类

向量搜索视频地址

除了暴力搜索能找到最近邻的向量外,其他任何算法都只能得到一些【近似的】结果,这些算法就是
ANN 近似近邻(Approximate Nearest Neighbors)

1.按数据结构分类:

哈希: 统一个hash算法时,向量相近的容易发生碰撞,被分到同一个桶中,只需要在同一个桶中快速搜索就行

树:

图:分层导航小世界(HNSW)— 类似跳表

根据一个公式l(v) = floor(-ln(uniform(0, 1)) * mL),mL = 1 / ln(M) ,公式里面会有随机数,每个向量节点通过公式得到一个数,然后取整,得到它应该从第几层开始插入,新节点找到 最近的 参数:efConstruction 个候选节点进行连接,但不能超过最大连接数M,最底层包含所有的向量节点。这个公式中最重要的一个参数是,M为每个节点最大连接数

查询:
从顶层的一个入口点开始,使用贪婪算法找到该层的最近邻
将该点作为下一层的起点,继续搜索
逐层下探,直到最底层,找到最终的近似最近邻. 参数ef 控制近邻检索时的搜索范围,这个参数只适用于底层,最终从ef中找出前k个跟q最近的向量

反转文件:

使用k-means算法,将向量空间聚类为几个区域,比如nlist为4,则分为4个区,每个区都有一个中心点,周围的向量离哪个中心点近,就分到哪个区,然后计算出每个区的平均向量点,把中心点的位置更新为平均的向量点,在重新判断所有向量和哪个中心点近,就分到哪个区,重复这个训练过程,直到中心点趋于稳定。然后用query查询的向量去比较4个中心点中最近的点,找到对应的区,在暴力搜索那个区.

nlist:分区的数量, nprobe:候选区的数量,可以调大着2个参数来解决候选向量可能并不是准确的最近向量问题,但会增加搜索时间

在这里插入图片描述

2.按压缩分类:

实现方式:向量被分解为较少字节组成的块,以减少搜索期间内存的消耗和计算成本
优点:检索更快
缺点:降低了准确性

扁平化索引:直接计算查询向量和DB中向量的距离

量化索引 : 将索引算法(IVF,HNSW)与量化方法相结合,减少内存的占用,加快索引速度
量化索引分类:SQ(标准量化),PQ(乘积量化)
PQ:为了节约空间,先将高维的向量转换成N(4)个低维的子向量,每个子向量都用k-means算法,子向量的中心点去代表那个区的所有向量,只保留中心点的索引(映射表),这样原始向量量化编码值就约等于4个子向量合并的量化编码值,这样大大的节省的空间
在这里插入图片描述

常用的两个IVF_FLAT和HNSW算法比较

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

六. JSON 索引

地址
Milvus 可以添加Json类型的字段,但是如果没有指定索引的情况下,对 JSON 字段的查询需要全 Collection 扫描,随着数据集的增长,扫描速度也会变慢。
创建json 索引的要求:
1.具有一致、已知键的结构化 Schema
2.特定 JSON 路径上的等价和范围查询
3.需要精确控制索引键的情况
4.对目标查询进行高效存储加速

七. 混合查询

1.两个ANN查询(密集+稀疏BM25)
2.得到结果后进行Rerankers 重排 ,然后得出topK

八. 重排分类

1. 加权排名
对多个结果进行加权后得到最终结果,取topK

2. RRF 排序
RRF Score=1/ (k+rank)
rank 是某个结果在某一路搜索中的排名(第几名)
k 是一个常数,通常设为 60(防止排名=1时分数爆炸)
然后把所有搜索路径的 RRF 分数加起来,得到最终得分。

   举例:
   密集向量查询结果排名:2 → RRF 分数 = 1/(60+2) = 1/62 ≈ 0.0161
   稀疏BM25查询结果排名:1 → RRF 分数 = 1/(60+1) = 1/61 ≈ 0.0164
   总分 = 0.0161 + 0.0164 = 0.0325

3. Boost 关键词加权(单次搜索用)
在搜索结果候选项中查找匹配项,并通过指定权重来提升这些 匹配项的得分。

 举例:搜索水果,结果为 苹果,香蕉,哈密瓜 等。我想对 提高香蕉的得分,
 我就用这个Boost 排序,所有等于香蕉的会乘以权重

4. 衰减排名
在传统的向量搜索中,搜索结果的排名纯粹取决于向量的相似性–向量在数学空间中的匹配程度

 考虑一下这些日常场景:
 在新闻搜索中,昨天的文章应该比三年前的类似文章排名靠前
 搜索餐厅时,优先考虑 5 分钟车程内的餐厅,而不是需要 30 分钟车程的餐厅

这些场景都有一个共同的需求:平衡向量相似性与时间、距离或流行度等其他数字因素。

在这里插入图片描述
衰减排名器:

高斯:

  是一种根据距离或时间等因素,对评分进行非线性衰减的加权方法,
  常用于搜索排序、推荐系统和向量检索中,用来表达“越接近越好”的优先级思想
  举例:用户搜“附近的咖啡馆” ,你有向量相似度(语义匹配),也有地理距离。
  你想让“离用户近”的咖啡馆优先展示,哪怕它的语义匹配稍低。对“距离”做高斯衰减

指数:

  1.用户希望最近或附近的项目在搜索结果中占主导地位
  2.较旧或较远的项目如果特别相关,仍应可被发现
  3.相关性下降应该是前负荷的(开始时较陡峭,之后较缓慢)
   比如:超过 24 小时的新闻文章相关性持续下降,但从未达到零。
   即使是几天前的新闻也能保持最低的相关性,使重要但较旧的新闻仍能出现在结果 中(尽管排名较低)

线性:

线性衰减能独特地创建一个确定的终点,因此对于有自然边界或截止日期的应用特别有效。
比如确切时间的优惠活动,送货半径,限制年龄的内容

九. Rag 查询优化

  1. 创建假设问题

每个文档块中的内容提出的多个问题

  1. 创建关键词等元数据信息
    过滤关键词等元数据来加快搜索,提高准确性

  2. 复杂问题使用llm分解为子问题

  3. 复杂问题进行改写查询
    原始用户查询:"我有一个包含 100 亿条记录的数据集,想把它存储到 Milvus 中进行查询。可以吗?
    回退问题:“Milvus 可以处理的数据集大小限制是多少?”

  4. 增加索引

  5. 合并文档块
    合并策略:如果前k 个子块中有特定数量(n)的子块属于同一个父块,系统会判定这个父块所代表的,更完整的上下文可能对回答问题至关重要,于是用这个父块的完整内容,替代被召回的子块

  6. 分层索引
    以建立两级索引:一级是文档摘要索引,另一级是文档块索引。向量搜索过程包括两个阶段:首先,我们根据摘要过滤相关文档,随后,我们在这些相关文档中专门检索相应的文档块。

  7. 利用Rerank重排

  8. 调整提示中的块顺序
    LLMs 在推理过程中经常会忽略给定文档中间的信息。相反,他们往往更依赖于文档开头和结尾的信息。
    在检索多个知识块时,将置信度相对较低的知识块放在中间,而将置信度相对较高的知识块放在两端。

  9. 使用LangGraph Agents 的自我反思
    一些最初检索到的 Top-K 文档块是模棱两可的,可能无法直接回答用户的问题。
    在这种情况下,我们可以进行第二轮反思,以验证这些文档块是否能真正解决查询问题

  10. 搜集用户常用的问题分析,创建规则或者对应的信息快

  11. 生成伪答案去查询
    不直接使用用户简短的查询去匹配冗长的问答,先使用LLM生成一个“理想的答案”,然后用这个内容更加丰富的伪答案向量化后去进行真实的检索。因为两种在形式,长度和语义丰富度上更加的对等,从而显著的提高在零样本场景下的检索精度

  12. 多路召回混合检索
    稀疏和密集向量一起检索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值