Elasticsearch「kNN Retriever」把向量檢索裝進一條 \_search 管線

1. kNN retriever 是什么?

kNN retriever 是 Retriever 框架中的首階段召回器,負責對一個向量字段做近鄰搜索,返回 Top-K 文檔。相比早期的 knn 頂級語法,Retriever 讓我們能在一個請求里組合多種策略(如 RRF/Rescorer/Linear/Rule 等),把復雜的檢索流程收斂到單次 API 調用

最小示例:

GET /restaurants/_search
{"retriever": {"knn": {"field": "vector",          // dense_vector 且開啟 indexing"query_vector": [10, 22, 77],"k": 10,                    // 返回的近鄰數量"num_candidates": 10        // 每個分片候選集大小(≥ k)}}
}

2. 必備前提

  • field 必須是 dense_vector 且開啟 indexing(支持近似向量檢索)。
  • query_vector 維度必須與字段一致;
    或者用 query_vector_builder(由模型在線生成查詢向量),二者不可同用
  • 適配 Serverless/Stack 的 Retriever 語法(8.16+ 普遍 GA,細節隨版本演進)。

3. 核心參數詳解與實戰建議

3.1 field(必填)

向量字段名。
建議:為該字段單獨配置合適的近似索引(例如 HNSW 的 M/efConstruction),以平衡召回率與延遲。

3.2 query_vector / query_vector_builder(二選一)

  • query_vector:直接傳浮點數組或十六進制字節(與字段維度一致)。
  • query_vector_builder:在查詢期由模型構建向量(適合服務化 embedding)。

選擇指南:

  • 線上 RAG/檢索場景通常預先 embed,性能更穩;
  • 想用統一模型推理與多模態輸入時,考慮 query_vector_builder

3.3 k(必填)

最終返回的 Top-K。
經驗值:終端排序/重排還會繼續“洗牌”,k 設得略大于展示位(如展示 10,可取 50~100)更穩。

3.4 num_candidates(必填/有默認)

每分片候選集大小,≥ k(或當未顯式 k≥ size),且 ≤ 10000
默認:min(1.5 * k, 10_000)

調優要點

  • 更大num_candidates ? 更高召回更準 Top-K,但延遲與內存占用上升;
  • 多分片時是分片級采樣:每個分片都先取 num_candidates,合并后再出全局 Top-K。

3.5 filter(可選:單個或數組)

在向量檢索前先用結構化/倒排過濾

  • 限定類目、狀態、時間、地理范圍等;
  • 只有通過過濾的文檔才進入 kNN 候選與排序。

建議:盡量把能過濾的條件都放進來,先減集合后做向量檢索,性能與相關性都會更好。

3.6 similarity(可選:浮點)

直接作用于“向量相似度”本體的閾值,不同度量解釋不同:

  • l2_norm(歐氏距離):半徑閾值,僅返回在“半徑=similarity”的超球體內的向量;值越小越嚴格
  • cosine / dot_product / max_inner_product:只返回相似度 ≥ similarity 的向量;值越大越嚴格

和最終 _score 的區別:similarity原始向量相似度的門檻;命中后文檔還會按 similarity 計分并應用 boost,然后進入 Top-K。

調參技巧

  • 若召回太多噪聲,適當提高 cosine/dot_product 的閾值;
  • l2_norm 時注意尺度(embedding 是否歸一化)。

4. 進階:量化向量的重排(rescore_vector

版本:Stack 9.1.0(9.0.0 為 preview)
僅對量化后的 dense_vector 有意義;非量化字段會忽略該項。

動機:量化索引的近似搜索極快,但初始得分可能受量化誤差影響。
方案:先用近似索引取候選,再用原始向量更小集合做精排。

配置項:

  • oversample(必填,浮點):對 k 做過采樣倍率。工作流:

    1. 按近似索引取 num_candidates
    2. 選出 k * oversample 個候選,用原始向量重算相似度;
    3. 重算后的 Top-K 作為最終結果。

經驗值oversample2.0~4.0 常見。過大提升有限但開銷明顯;建議壓測找平衡點。

5. 組合示例

5.1 kNN + 過濾(類目 & 地理)

GET /poi/_search
{"retriever": {"knn": {"field": "embedding","query_vector": [/* 768 dims */],"k": 50,"num_candidates": 500,"filter": [{ "term":  { "category": "restaurant" } },{ "range": { "rating": { "gte": 4.0 } } },{ "geo_distance": { "distance": "5km", "location": { "lat": 37.78, "lon": -122.42 } } }],"similarity": 0.7  // 僅對 cosine/dot_product 有意義;舉例值}}
}

5.2 量化向量 + 過采樣重排

GET /docs/_search
{"retriever": {"knn": {"field": "emb_q8",            // 量化后的 dense_vector"query_vector": "0A0B0C...",  // 也可用 hex 向量"k": 20,"num_candidates": 400,"rescore_vector": {"oversample": 3.0           // 先取 60 再用原始向量精排出最終 20}}}
}

5.3 與其他 Retriever 組合(示意)

  • 首階段:knn 召回語義近鄰
  • 另一支:standard 倒排匹配(BM25 / multi_match)
  • 融合:rrf / linear
  • 二階段:rescorer(可接 LTR / 語義 re-ranker)

組合寫法見 Retriever 文檔,這里不贅述。把 kNN 放進統一管線的收益,就是一次請求完成多路召回與融合。

6. 調優清單(Checklist)

  1. 字段準備dense_vector + 索引參數合理(HNSW 的 M/ef*)。
  2. 維度一致query_vector 與字段維度嚴格對齊。
  3. 候選規模num_candidates = k 的 10~30 倍起步,根據延遲預算逐步調大。
  4. 過濾優先:能過濾先過濾(類目/狀態/時間/地理/安全域),縮小向量檢索集合。
  5. 相似度閾:合理用 similarity 做噪聲門檻(尤其 cosine/dot_product)。
  6. 量化精排:量化場景開啟 rescore_vector,用 oversample 控誤差。
  7. 多分片意識:Top-K 是全局合并num_candidates分片級采樣。
  8. 觀測:記錄 took、候選規模、最終 k、命中率與點擊/轉化,形成離線-在線閉環。

7. 常見報錯與排查

  • illegal_argument_exception: dimensions mismatch
    → 檢查向量維度;embedding 模型升級后維度變化是高頻來源。
  • num_candidates too small / k > num_candidates
    → 調整參數,滿足約束(且 ≤ 10000)。
  • 結果偏“飄”(語義不穩)
    → 提高 num_candidates、設置 similarity、或在量化場景開啟 rescore_vector
  • 延遲過高
    → 降低 num_candidates、先做更嚴格 filter、或優化向量索引參數(M/efConstruction)。

8. 小結

  • kNN retriever 把向量近鄰召回收斂進統一的檢索管線,與倒排、RRF/LTR/Rescorer 等協同非常自然;
  • 三要素:候選規模(num_candidates)過濾(filter)相似度閾(similarity)
  • 量化場景配上 rescore_vector.oversample,在準確度與延遲之間找最優點。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93515.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第四天~在CANFD或CAN2.0的ARXML文件中實現Multiplexor多路復用信號實戰

【ARXML專題】-解鎖CAN信號超能力:Multiplexor多路復用技術深度解析 "當你的CAN幀需要傳輸100種信號卻只有64字節時,就像試圖用行李箱裝下一整個衣櫥——Multiplexor就是你的真空壓縮袋" 信號擁堵時代的救世主 現代豪華汽車中,單個ECU可能需處理500+信號,而傳統…

JavaScript 基礎入門:從零開始學 JS

一、JavaScript 簡介JavaScript(簡稱 JS)是一種高級的、解釋型的編程語言,由 Netscape 公司的 Brendan Eich 在 1995 年開發,最初命名為 LiveScript,后因與 Java 的合作關系而改名為 JavaScript。作為 Web 開發的三大核…

pytest中使用loguru的問題及解決

引語 上一篇文章,我們向大家推薦了python語言的一個第三方日志庫loguru,使用非常簡單且功能完備。 但對于我們做自動化測試,經常使用 pytest 框架的小伙伴來說,卻有點小問題。就是 Pytest 內建的日志捕獲機制是在標準庫 logging 的基礎上進行優化過的。 這樣我們在使用 p…

Qt異步編程:QFuture與QPromise深度解析

在現代GUI應用中,異步操作是保證界面流暢性的關鍵。本文將深入探討Qt框架中強大的異步工具——QFuture和QPromise,揭示它們如何簡化多線程編程并提升應用性能。 為什么需要QFuture/QPromise? 在Qt開發中,我們經常面臨這樣的挑戰&a…

基于Python的電影評論數據分析系統 Python+Django+Vue.js

本文項目編號 25008 ,文末自助獲取源碼 \color{red}{25008,文末自助獲取源碼} 25008,文末自助獲取源碼 目錄 一、系統介紹1.1 用戶功能1.2 管理員功能 二、系統錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀 六、…

數據結構:在二叉搜索樹中插入元素(Insert in a BST)

目錄 插入的本質是什么? 如何尋找“合法”的位置?—— 模擬查找過程 遞歸插入(Recursive Insert)—— 優雅的實現 代碼逐步完善 總結 上一節我們從第一性原理搞清楚了二叉搜索樹(BST)是什么&#xff0…

【論文閱讀】美 MBSE 方法發展分析及啟示(2024)

文章目錄 論文摘要 論文框架 1. MBSE 方法概述 2. 美國防部的 MBSE 方法政策要求 在這里插入圖片描述 3. 美軍兵種的 MBSE 方法政策要求 4. 啟示 5.總結 參考文獻 論文摘要 本文梳理了美國防部基于模型的系統工程(MBSE)方法的發展歷程,并剖析 其技術原理;跟蹤《數字工程戰略…

人工智能訓練師復習題目實操題1.1.1 - 1.1.5

列出所有的python 庫和 apiimport pandas as pd import numpy as np就這兩個庫pandas 庫 - apinumpy 庫 - apimatplotlib.pyplot - apipd.read_csv()np.where(condition,x,y)fillna(methodffill,inplaceTrue)methodbfill,pd.read_excel()np返回結果 series 對象 data[A列].valu…

旅游管理實訓室:旅游教育實踐育人的關鍵支撐

在中等職業教育旅游服務與管理專業教學中,旅游管理實訓室并非簡單的教學場所,而是落實專業教學標準、實現 “理實一體化” 育人的核心陣地。它通過模擬真實職業場景、配置專業實訓設備、設計實踐教學活動,將抽象的專業知識轉化為具體的操作技…

http工作流程

HTTP(Hypertext Transfer Protocol,超文本傳輸協議)是互聯網中客戶端與服務器之間傳輸超文本(如HTML、圖片、JSON等)的核心協議,基于請求-響應模型和TCP/IP協議族工作。其完整工作流程可拆解為以下9個核心步…

正則表達式實用面試題與代碼解析專欄

正則表達式是前端表單驗證、字符串匹配的核心工具,簡潔高效的正則能大幅提升代碼性能。本專欄整理了7道高頻面試題,包含核心正則表達式、代碼實現及關鍵知識點解析,幫你快速掌握正則實用技巧。 一、正則基礎:核心概念與語法 在學習面試題前,先明確幾個高頻基礎語法,這是…

【數據可視化-89】基孔肯雅熱病例數據分析與可視化:Python + pyecharts洞察疫情動態

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

云智智慧停充一體云-allnew全新體驗-路內停車源碼+路外停車源碼+充電樁源碼解決方案

采用Java主流的微服務技術棧,基于 Spring Cloud Alibaba 的微服務解決方案進行封裝的快速開發平臺,包含多種常用開箱即用功能的模塊,通用技術組件與服務、微服務治理,具備RBAC功能、網關統一鑒權、Xss防跨站攻擊、自動生成前后端代…

利用pypy加速pyxlsbwriter生成xlsb文件

上文介紹了python通過DuckDB和pyxlsbwriter模塊生成xlsb文件,因為python是解釋執行,它的速度有點慢,pypy是另一種python解釋器,它使用即時編譯(JIT)技術來提高執行速度。 因為DuckDB與pypy不兼容&#xff0…

【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略

Spring Boot 集成 MyBatis-Plus 全攻略 1. 為什么選擇 MyBatis-Plus 零侵入:在 MyBatis 基礎上增強,不影響現有功能。內置 CRUD:無需寫 XML/SQL,直接調用 BaseMapper 方法。強大插件:分頁插件、性能分析、樂觀鎖、多租…

LangChain 多任務應用開發

Q: LangChain dify coze是競品關系 都是AI Agent搭建平臺,dify和coze 屬于低代碼,langChain屬于高代碼,coze優于dify Q:向量數據庫是存儲向量,做相似度檢索的,可以用faiss milvus chromdb Q:使用…

實用技巧:Oracle中精準查看表占用空間大小

目錄實用技巧:Oracle中精準查看表占用空間大小一、為什么需要精準統計表空間占用?二、完整查詢SQL:覆蓋表、LOB、索引三、SQL語句關鍵邏輯解析1. 基礎表:dba_tables 與 dba_tablespaces2. 子查詢1:統計表段空間&#x…

openEuler等Linux系統中如何復制移動硬盤的數據

在 openEuler 系統中,提示 “You should mount volume first” ,意思是需要先掛載移動硬盤的分區才能訪問: 安裝必要軟件(針對特殊文件系統) 如果移動硬盤是 NTFS 等非 Linux 原生支持的文件系統格式,需要安裝對應的支持軟件,以掛載 NTFS 格式移動硬盤為例,需要安裝 …

java如何把字符串數字轉換成數字類型

在Java中將字符串數字轉換為數字類型有多種方法,以下是詳細說明和示例代碼: 一、基礎轉換方法 Integer.parseInt() String str "123"; int num Integer.parseInt(str); // 轉換為intDouble.parseDouble() String str "3.14"; dou…

WPFC#超市管理系統(6)訂單詳情、顧客注冊、商品銷售排行查詢和庫存提示、LiveChat報表

WPF&C#超市管理系統10. 訂單詳情10.1 頁面布局10.2 功能實現11. 顧客注冊12. 商品銷售排行查詢與庫存提示14. LiveChart報表總結10. 訂單詳情 10.1 頁面布局 頁面分三行布置,第一行復用OutstorageView界面的第一行,將屬性和命令修改為顧客相關第二…