RAG项目学习笔记:用pgvector检索chunk的逻辑详解
📅 2026/6/27 3:23:49
👁️ 次浏览
记录学习RAG项目的过程项目中配置了 Milvus 和 PGVector 两种向量检索的实现。本次来看一下使用pgvector检索chunk时具体的逻辑是怎样的。0. 先看一下项目中代码是怎么写的Override public ListRetrievedChunk retrieveByVector(float[] vector, RetrieveRequest request) { // 设置ef_search提升召回率 // noinspection SqlDialectInspection,SqlNoDataSourceInspection jdbcTemplate.execute(SET hnsw.ef_search 200); String vectorLiteral toVectorLiteral(vector); // noinspection SqlDialectInspection,SqlNoDataSourceInspection return jdbcTemplate.query(SELECT id, content, 1 - (embedding ?::vector) AS score FROM t_knowledge_vector WHERE metadata-collection_name ? ORDER BY embedding ?::vector LIMIT ?, (rs, rowNum) - RetrievedChunk.builder() .id(rs.getString(id)) .text(rs.getString(content)) .score(rs.getFloat(score)) .build(), vectorLiteral, request.getCollectionName(), vectorLiteral, request.getTopK() ); }1. 设置索引参数首先执行了jdbcTemplate.execute(SET hnsw.ef_search 200);解析HNSW 在最底层搜索时不是找到第一个看起来最近的就停而是维护一个候选队列不断尝试邻居直到确认没有更近的为止。问题来了队列太小 → 走两步就停了可能错过真正的最近邻快但不准队列太大 → 要考察的节点多搜得仔细但慢准但慢ef_search就是控制这个队列大小的旋钮。1.1 什么是HNSW索引HNSW 全称是分层可导航小世界图是最主流的索引算法。如果你学习过数据结构图那么就很好理解了。1、分层最底层包含所有向量每上一层包含的向量就越少节点稀疏从而能实现长距离跳跃。类似的思想跳表2、可导航假设向量数据库里有 8 个向量A~H建了 3 层图查询和 Q 最相似的向量。最顶层入口节点 A、B → 计算 A、B 与 Q 的距离B 更近移动到 B下沉到中间层。中间层从 B 出发看 B 的邻居C、D、EE 最近且比 B 更近 → 移动到 E再看 E 的邻居没有比 E 更近的 → 下沉到最底层。最底层含全部 A~H从 E 出发看 E 的邻居H 最近且比 E 更近 → 移动到 H再看 H 的邻居没有比 H 更近的 → H 就是结果。2. 来看执行的SQLSELECT id, content, 1 - (embedding ?::vector) AS score FROM t_knowledge_vector WHERE metadata-collection_name ? ORDER BY embedding ?::vector LIMIT ?逐个解析2.1 : :是什么两个冒号代表强制类型转换也就是把传入的字符串类型的向量数组转换为pgvector的向量类型vector。Q为什么要传入字符串类型A因为JDBC驱动不认识vector类型无法直接将float[]当做参数绑定所以在数据库端做一个类型转换。2.2 是什么在 PostgreSQL 的pgvector扩展中定义了三个常用的距离操作符余弦距离-欧几里得距离#负内积所以embedding ?::vector表示用db中存储的embedding向量和参数传入的向量做余弦距离计算。余弦距离 1 - 余弦相似度取值范围[0,2]0表示方向完全相同距离02表示方向完全相反距离最远。Q为什么要用1-余弦距离A目的是把距离转换成分数1 - 0 1 距离最近分数最高1 - 2 -1 距离最远分数最低这样做语义上更直观score“得分高匹配好”符合直觉。下游排序也方便。2.3 - 是什么where条件中的-写法 PostgreSQL 的 JSON/JSONB 路径操作符用于从 JSON 中按键提取文本值对应的-提取的是JSON 对象顺带一提MySQL 也有同名操作符-但语法不同需要加$符insert into test VALUES(1,{name: 张三, age: 25, hobbies: [读书, 跑步]}) SELECT * from test WHERE info-$.name 张三;
在精密制造向微米级精度突破的当下,激光打孔设备早已成为航空航天、电子制造、医疗器械等领域的核心加工装备,而作为设备的“智慧大脑”,佳维视工业一体机凭借专为工业场景定制的硬件能力,彻底打破了传统PC在激光加工场景下的性能…
📅 2026/6/27 3:23:49
摘要针对128KB大窗口LZ77匹配在鲲鹏920上因Cache Miss导致性能不足的问题,本文提出一套"双哈希L2预取惰性剪枝"的工程化落地方案。在鲲鹏920(64KB L1/512KB L2)现货平台上实测:压缩率与ZSTD-level9持平(差距…
📅 2026/6/27 3:23:49
IT策士 10余年一线大厂经验,专注 IT 思维、架构、职场进阶。我会在各个平台持续发布最新文章,助你少走弯路。 数据是企业的核心资产,而备份与恢复是保障数据安全的最后一道防线。本篇带你全面掌握 MySQL 的备份与恢复技术,从 mysq…
📅 2026/6/27 3:18:49
一、调试类型Debug按侵入性(invasive)可以分为两大类:侵入式调试(Invasive Debug):暂停处理器执行,干预程序运行,包括停机调试(Halting Debug)和调试监控异常…
📅 2026/6/27 4:33:52
商场类小程序看上去功能很多,但用户真正走的路径其实不复杂:看活动、领券、下单、支付、到店或核销、后续复购。问题通常不是功能想不到,而是功能一多以后,顺序容易乱。优惠券一个入口、团购券一个入口、会员页又是另一套逻辑&…
📅 2026/6/27 4:33:52
最近整理一份数据库故障处理 SOP,手头攒了一堆东西——运维同事的口述记录、几次故障复盘会的速记、监控告警截图上的手写标注,还有散落在飞书文档里的处理步骤。信息密度不低,但格式混乱、术语不统一,直接写文档会很花时间。我决…
📅 2026/6/27 4:33:52
家庭影院搭建:为何强弱电干扰是隐形杀手在家庭影院的构建过程中,许多用户往往将预算大量倾斜于投影机、音响主机或沙发座椅,却忽视了底层的布线逻辑。实际上,导致画面出现水波纹、音响产生底噪(电流声)甚至…
📅 2026/6/27 4:33:52
开篇当下跨境与国内电商店群模式日趋成熟,不少工作室手握几十甚至上百家店铺。绝大多数运营者在建好店铺分组目录之后,便不再维护管理。随着新增店铺、废弃账号不断累积,分组结构慢慢变得杂乱无章。很多人以为分组只是简单归类账号࿰…
📅 2026/6/27 4:33:52
csh 命令
基本介绍
csh (C Shell) 是 Unix/Linux 系统中的一种命令行解释器,由 Bill Joy 于 1978 年编写。csh 的语法风格类似于 C 语言,提供了命令历史、别名、作业控制等功能。虽然现在使用不如 bash 广泛,但在某些系统和脚本中仍然可见。
…
📅 2026/6/27 4:28:52
一、引言
1.1 研究背景
深度神经网络在各种计算机视觉任务上取得了巨大成功,但模型的计算效率始终是制约其在实际场景中部署的关键因素。特别是在目标检测领域,模型往往需要在保证精度的同时实现实时推理。
当前主流的网络架构设计往往在训练时采用复杂的多分支结构(如Re…
📅 2026/6/27 0:07:52
更多请点击:
https://codechina.net
第一章:JetBrains官方不愿明说的IDEA License陷阱(含企业级授权成本暴增预警) JetBrains 官方文档中极少提及 License 模式在实际企业部署中的隐性成本激增机制,但真实场景中&…
📅 2026/6/27 0:07:52
051、相对导入 vs 绝对导入:importlib 动态加载与插件系统设计上周帮团队排查一个诡异的ModuleNotFoundError,同事在子包内部用相对导入引用兄弟模块,结果跑测试时炸了——明明IDE里高亮正常,一执行就报“attempted relative impo…
📅 2026/6/27 0:07:52
1. 从手册到实战:SLIDER与SPINBOX控件的深度解析在嵌入式GUI开发里摸爬滚打十几年,我见过太多项目因为界面交互的“小问题”而卡壳。参数调节不跟手、数值输入效率低下,这些看似不起眼的细节,往往是决定产品用户体验成败的关键。e…
📅 2026/6/26 19:22:54
暗黑2重获新生:D2DX如何让经典游戏在现代Windows系统上流畅运行 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx
…
📅 2026/6/26 19:27:14
CompressO终极指南:免费开源的视频图像压缩神器 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO
你…
📅 2026/6/26 17:51:00