第六阶段 53 · kNN 向量检索与语义搜索(dense_vector + knn) 53 · kNN 向量检索与语义搜索dense_vector knn阶段第六阶段 / 进阶专题ES 8.x 旗舰能力ESdense_vectorknn查询、混合检索BM25 向量 | PostgreSQLpgvector的-/最近邻1. 概念从“关键词匹配”到“语义相似”前面所有查询match/term…都是关键词/词项匹配——字面对不上就搜不到搜“笔记本”匹配不到只写“notebook”的文档。向量检索换了个思路把文本用embedding 模型转成一个高维向量如 768 维浮点数组语义相近的文本向量也相近。查询时把问题也转成向量找距离最近的 K 个文档kNN k-Nearest Neighbors。于是“笔记本”能召回“notebook / 便携电脑 / ThinkPad”——按语义而非字面。ES 8.x 用dense_vector字段 HNSW 图索引原生支持近似 kNNANN性能可用于生产。向量不是取代关键词检索而是互补关键词精准、向量懂语义生产常做混合检索见第 5 节。2. PostgreSQL 对照-- pgvector存向量 最近邻检索CREATETABLEdocs(idint,embedding vector(768));CREATEINDEXONdocsUSINGhnsw(embedding vector_cosine_ops);-- 找和查询向量最相似的 10 条 是余弦距离SELECTidFROMdocsORDERBYembedding:query_vecLIMIT10;ES 的dense_vectorknn≈pgvector的vector列 HNSW 索引 排序。3. ES DSL3.1 mapping定义向量字段PUT docs_idx { mappings: { properties: { title: { type: text }, content: { type: text }, embedding: { type: dense_vector, dims: 768, // 与你的 embedding 模型维度一致 index: true, // 建 HNSW 索引支持快速 ANN similarity: cosine // cosine / dot_product / l2_norm } } } }3.2 写入向量由模型离线/写入时算好POST docs_idx/_doc { title: ThinkPad X1, content: 轻薄商务本, embedding: [0.021, -0.114, 0.337, ... ] } // 768 个浮点3.3 kNN 查询找语义最近的 K 条POST docs_idx/_search { knn: { field: embedding, query_vector: [0.02, -0.10, 0.31, ...], // 查询文本的向量 k: 10, // 返回最近 10 条 num_candidates: 100 // 每分片先取 100 候选再精排越大越准越慢 }, _source: [title, content] }3.4 带过滤的 kNN先过滤再找近邻POST docs_idx/_search { knn: { field: embedding, query_vector: [ ... ], k: 10, num_candidates: 100, filter: { term: { category: laptop } } // 只在该类目里找近邻 } }4. Spring Boot 实现ComponentpublicclassDoc53KnnSearch{AutowiredprivateElasticsearchClientelasticsearchClient;/** * 语义检索传入“查询文本的向量”返回最相似的 topK 篇。 * 注意queryVector 由你的 embedding 模型本地模型 / OpenAI / 自建服务先算好。 */publicListMapString,ObjectsemanticSearch(StringindexName,ListFloatqueryVector,inttopK)throwsIOException{SearchResponseMaprespelasticsearchClient.search(s-s.index(indexName).knn(k-k.field(embedding).queryVector(queryVector).k(topK).numCandidates(Math.max(topK*10,100)))// 候选数经验值.source(src-src.filter(f-f.includes(title,content))),Map.class);returnresp.hits().hits().stream().map(Hit::source).filter(Objects::nonNull).collect(Collectors.toList());}}knn是SearchRequest上的一等参数与query平级。每条命中的相似度分在hit.score()similarity 越高分越高。向量怎么来ES 本身不算 embedding除非用 ELSER/推理管道一般在应用侧调模型把文本转向量再写入/查询。5. 混合检索BM25 关键词 向量语义生产推荐单靠向量可能漏掉精确词如型号X1-2026单靠关键词又不懂同义词。生产上把两者结果融合兼得“精准 语义”。ES 提供两种方式5.1 knn 与 query 同时给分数相加POST docs_idx/_search { query: { match: { content: 轻薄 笔记本 } }, // BM25 关键词 knn: { // 向量语义 field: embedding, query_vector: [ ... ], k: 10, num_candidates: 100, boost: 0.5 } }5.2 RRFReciprocal Rank Fusion按排名融合更稳POST docs_idx/_search { retriever: { rrf: { retrievers: [ { standard: { query: { match: { content: 轻薄 笔记本 } } } }, { knn: { field: embedding, query_vector: [ ... ], k: 20, num_candidates: 100 } } ], rank_window_size: 50 } } }RRF 不依赖两路分数的绝对量纲只看各自排名融合更稳是当前混合检索的推荐做法。6. 坑与最佳实践dims必须与模型一致写入向量维度和 mappingdims不符会报错换模型通常要 reindex。similarity要匹配模型多数句向量模型用cosine用点积模型选dot_product需归一化。num_candidates调准确率越大越接近精确 kNN 但越慢经验k的 10 倍起步按召回率调。向量很占空间和内存HNSW 图常驻内存维度高/文档多时评估资源必要时降维或用量化int8/bbq。ES 不负责生成向量除非用 ELSER 稀疏向量或 inference 管道文本→向量在应用侧或推理服务做。过滤用knn.filter先缩小范围再找近邻比查完再过滤更准更快。生产优先混合检索 RRF纯向量易漏精确词纯关键词不懂语义融合最稳。ELSER稀疏向量是另一条路Elastic 自带模型无需自备 embedding适合英文语义检索可作对比方案。相关关键词全文匹配对比基线10-match-全文匹配.md相关性打分与 boosting41-相关性调优.md字段裁剪减小向量返回开销19-source-字段裁剪.md全系列完结至此学习计划覆盖了 ES 的两大检索范式关键词/BM2510–19与向量/语义本篇外加聚合、写入、索引管理、深分页、运维、关系建模、并发控制。

相关新闻

最新新闻

自进化智能体|自演化智能体综述

自进化智能体|自演化智能体综述

🌞欢迎来到人工智能的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 📆首发时间:🌹2026年7月30日🌹 ✉️希望可以和大家一起完成进阶…

2026/8/4 14:56:32
NX/UG二次开发实战:基于特征遍历的孔特征自动查找与参数提取

NX/UG二次开发实战:基于特征遍历的孔特征自动查找与参数提取

1. 项目概述:为什么我们需要在NX/UG中查找孔特征?在机械设计、模具制造、工装夹具设计这些行当里,NX(或者大家更习惯叫它UG)几乎是绕不开的工具。图纸画完了,模型建好了,接下来就是加工和出图。…

2026/8/4 14:56:32
Windows Server 2008 R2打印服务器部署与客户端批量安装实战指南

Windows Server 2008 R2打印服务器部署与客户端批量安装实战指南

1. 项目概述与核心价值最近在整理公司内部IT基础设施时,接手了一个老项目的迁移和标准化任务:将分散在各个部门同事电脑上的本地打印机,集中迁移到一台专用的打印服务器上进行统一管理。这个需求在很多中小型办公室或对办公设备有集中管控要求…

2026/8/4 14:56:32
Oracle数据库与PL/SQL Developer完整部署指南:从安装到汉化

Oracle数据库与PL/SQL Developer完整部署指南:从安装到汉化

1. 从零到一:Oracle数据库与PL/SQL Developer的完整部署蓝图如果你是一名刚接触企业级数据库的开发者或运维,或者正准备从MySQL、SQL Server迁移到更重量级的平台,那么Oracle数据库和PL/SQL Developer这对黄金组合,大概率是你绕不…

2026/8/4 14:56:32
Windows上的终极Android应用安装器:APK Installer完整指南

Windows上的终极Android应用安装器:APK Installer完整指南

Windows上的终极Android应用安装器:APK Installer完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法直接安装Android应用而烦恼…

2026/8/4 14:56:32
Windows Build Tools:3分钟搞定Windows C++开发环境配置的终极指南

Windows Build Tools:3分钟搞定Windows C++开发环境配置的终极指南

Windows Build Tools:3分钟搞定Windows C开发环境配置的终极指南 【免费下载链接】windows-build-tools :package: Install C Build Tools for Windows using npm 项目地址: https://gitcode.com/gh_mirrors/wi/windows-build-tools 你是否曾在Windows上安装…

2026/8/4 14:51:32