Elasticsearch向量庫

在Elasticsearch(ES)最新版本(目前8.x系列)中,無需額外的“embedding插件”,因為ES從7.14版本開始就原生支持向量數據類型(dense_vector 和向量搜索能力,可直接作為向量庫使用。其核心功能是存儲、索引和搜索高維向量(如文本embedding、圖像特征等),常用于語義搜索、推薦系統等場景。

一、核心概念與前提

  • 向量(Vector):這里指高維浮點數組(如文本經BERT模型轉換的768維embedding),用于量化表示數據的語義/特征。
  • dense_vector類型:ES中用于存儲向量的字段類型,支持高維向量(最大維度取決于版本,8.x支持至2048維)。
  • 向量搜索:通過計算向量間的相似度(如余弦相似度、歐氏距離),找到與目標向量最相似的結果(kNN搜索)。

二、作為向量庫的使用步驟

1. 定義索引映射(Mapping)

首先創建一個包含dense_vector字段的索引,用于存儲向量數據。例如,存儲“文本+embedding”的索引:

PUT /text_embeddings
{"mappings": {"properties": {"text": { "type": "text" },  // 原始文本"embedding": {               // 向量字段"type": "dense_vector","dims": 768,               // 向量維度(需與實際embedding維度一致,如BERT的768維)"index": true,             // 開啟索引(用于向量搜索)"similarity": "cosine"     // 相似度計算方式(cosine/euclidean/l2_norm,默認l2_norm)}}}
}
  • dims:必須與embedding的維度一致(如768、1024等)。
  • similarity:指定默認相似度算法(余弦相似度最常用于語義匹配)。
  • index: true:啟用向量索引(基于HNSW算法的近似kNN搜索),提升搜索性能。
2. 插入帶向量的數據

將文本通過embedding模型(如BERT、Sentence-BERT)轉換為向量后,存入ES:

POST /text_embeddings/_doc/1
{"text": "Elasticsearch是一個分布式搜索引擎","embedding": [0.123, 0.456, ..., 0.789]  // 768維向量(省略部分維度)
}POST /text_embeddings/_doc/2
{"text": "向量搜索用于語義匹配","embedding": [0.234, 0.567, ..., 0.890]  // 另一768維向量
}

注意:向量需由外部模型生成(ES不負責文本→向量的轉換),常見工具如Python的sentence-transformers庫。

3. 執行向量搜索(kNN搜索)

給定一個查詢文本,先通過相同的embedding模型轉換為向量,再在ES中搜索最相似的向量:

GET /text_embeddings/_search
{"knn": {"field": "embedding",       // 向量字段名"query_vector": [0.111, 0.222, ..., 0.333],  // 查詢文本的embedding向量"k": 3,                     // 返回最相似的3個結果"num_candidates": 100       // 候選集大小(影響精度和性能,建議為k的10-100倍)},"fields": ["text"]  // 只返回原始文本字段
}
  • 結果解釋:ES會計算query_vector與索引中所有向量的相似度(按similarity指定的算法),返回Top 3最相似的文檔。
  • 精確搜索:若需精確計算(非近似),可使用script_score結合向量函數(但性能較差,適合小數據量):
GET /text_embeddings/_search
{"query": {"script_score": {"query": { "match_all": {} },"script": {"source": "cosineSimilarity(params.query_vector, 'embedding') + 1.0","params": {"query_vector": [0.111, 0.222, ..., 0.333]}}}}
}

三、核心原理過程

1. 向量存儲原理
  • dense_vector字段將向量以浮點數組形式存儲,與其他字段(如文本、數字)共同構成文檔。
  • index: true時,ES會為向量構建近似最近鄰(ANN)索引,基于HNSW(Hierarchical Navigable Small World)算法:
    • HNSW通過構建多層“導航圖”,加速向量相似度計算,避免全量比對(全量比對在高維、大數據量下性能極差)。
    • 索引過程中,向量會被插入到圖中,每層保留部分鄰居節點,查詢時通過上層導航快速定位候選節點,再在下層精確篩選。
2. 向量搜索原理
  1. 查詢向量生成:用戶輸入的查詢文本(或其他數據)通過embedding模型轉換為與存儲向量同維度的向量。
  2. 近似匹配:ES使用HNSW索引,從查詢向量出發,在導航圖中快速找到num_candidates個候選向量(候選集)。
  3. 精確計算:對候選集中的向量,按指定的相似度算法(如余弦)計算精確得分。
  4. 結果返回:按得分排序,返回Top k個最相似的文檔。
3. 與embedding模型的協同流程

完整的“文本語義搜索”流程如下:

原始文本 → (embedding模型)→ 向量 → 存入ES(dense_vector字段)↑                                  ↓
查詢文本 → (同一embedding模型)→ 查詢向量 → ES向量搜索 → 相似文本結果
  • 關鍵:查詢向量與存儲向量必須來自同一embedding模型,否則向量空間不兼容,相似度無意義。

四、最新版本的優化(8.x)

  • 更高維度支持:從早期版本的1024維提升至2048維,適配更大模型的embedding。
  • 性能優化:HNSW索引的構建和查詢效率提升,支持更大規模的向量數據(千萬級以上)。
  • 混合搜索:可同時結合向量搜索與傳統文本搜索(如match查詢),例如“語義相似且包含特定關鍵詞”。

總結

ES最新版本通過dense_vector字段和kNN搜索原生支持向量存儲與檢索,無需額外插件。其核心是利用HNSW算法實現高效的近似向量匹配,常與外部embedding模型結合,用于語義搜索等場景。使用時需注意向量維度一致性和相似度算法的選擇,以保證搜索效果。

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

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

相關文章

嵌入式學習的第四十四天-ARM

一、ARM內核基礎知識1.ALU算術邏輯單元;完成運算的電路2.通用寄存器:R0~R15R13(SP):棧指針寄存器:指向棧的指針(指向正確的位置),為了保護現場 R14(LR…

QML開發:QML中的基本元素

文章目錄一、概述二、常用基本元素2.1 基礎視覺元素(常用于布局和顯示)2.1.1 元素 Item 的介紹和使用2.1.2 元素 Rectangle 的介紹和使用2.1.3 元素 Image 的介紹和使用2.1.4 元素 Text 的介紹和使用2.2 交互元素(用于接收用戶操作&#xff0…

Spring AI 項目實戰(二十二):Spring Boot + AI +DeepSeek實現智能合同數據問答助手?(附完整源碼)

系列文章 序號 文章名稱 1 Spring AI 項目實戰(一):Spring AI 核心模塊入門 2 Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼) 3 Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼) 4

從 0 到 1 創建 InfluxDB 3 表:標簽、字段、命名規范一篇講透

前言 在使用 InfluxDB 3 存儲時序數據時,表的設計堪比蓋房子打地基,地基打歪,數據“塌方”指日可待。InfluxDB 雖然不是傳統意義上的關系型數據庫,但它有自己的一套“審美”:標簽(Tags)和字段(Fields)是它的雙核心,誰先誰后,關系重大,順序寫錯,查詢性能立馬打折。…

[sqlserver] 分析SQL Server中執行效率較低的SQL語句

查詢性能分析較低的SQL語句 -- 查詢性能分析 SELECT TOP 50qs.creation_time AS [編譯時間],qs.last_execution_time AS [最后執行時間],qs.execution_count AS [執行次數],qs.total_worker_time/1000 AS [CPU總時間(ms)],qs.total_elapsed_time/1000 AS [總耗時(ms)],(qs.tota…

SmartX 用戶建云實踐|寶信軟件:搭建“雙架構”私有云平臺,靈活滿足多種業務需求

上海寶信軟件股份有限公司(以下簡稱寶信軟件)系中國寶武實際控制、寶鋼股份控股的上市軟件企業,是中國領先的工業軟件行業應用解決方案和服務提供商,為寶武集團提供整體 IT 基礎架構解決方案與服務。為統一管理寶武集團旗下分散在…

應用科普 | 漫談6G通信的未來

【摘要前言】2019年推出的5G無線通信將移動設備的性能提升到了一個新的水平。首批應用利用5G提供移動寬帶,使消費者能夠以遠超以往的速度進行流媒體傳輸、游戲和連接。隨著技術的成熟,它已成為物聯網的關鍵組成部分,將機器匯集到一個全球網絡…

從零開始用 Eclipse 寫第一個 Java 程序:HelloWorld 全流程 + 避坑指南

對于 Java 初學者來說,第一次用 Eclipse 寫程序往往會手足無措 —— 找不到新建項目的入口、不知道包和類該怎么命名、運行時控制臺突然消失…… 別慌!本文以最經典的 “HelloWorld” 為例,手把手帶你走完從 Eclipse 項目創建到程序運行的完整…

NVIDIA Isaac GR00T N1.5 源碼剖析與復現

? 0. 前言 2025.6.11 NVIDIA Isaac GR00T N1 進化,英偉達發布了NVIDIA Isaac GR00T N1.5模型,效果比原先提高了不少,故來復現一下,看看能否應用于我的項目中: 代碼頁 項目頁 模型頁 ? 以下是使用 GR00T N1.5 的一般…

手把手教你馴服Apache IoTDB時序數據庫,開啟時序數據管理新征程!

手把手教你馴服Apache IoTDB,開啟時序數據管理新征程! 本文是一篇幽默風趣的 Apache IoTDB 時序數據庫安裝使用教程。從 “這東西能不能吃” 的靈魂拷問切入,先科普 IoTDB 的 “真實身份”—— 一款專為時序數據設計的數據庫利器,…

劇本殺小程序系統開發:開啟沉浸式推理社交新紀元

在數字化浪潮席卷的當下,傳統娛樂方式正經歷著前所未有的變革,劇本殺這一融合了推理、角色扮演與社交互動的熱門游戲,也搭上了科技的快車,劇本殺小程序系統開發應運而生,為玩家們開啟了一扇通往沉浸式推理社交新世界的…

Ubuntu系統VScode實現opencv(c++)視頻的處理與保存

通過OpenCV等計算機視覺工具,開發者可以像處理靜態圖像一樣對視頻流逐幀分析:從簡單的裁剪、旋轉、色彩校正,到復雜的穩像、目標跟蹤、超分辨率重建。而如何將處理后的高幀率、高動態范圍數據高效壓縮并封裝為通用格式(如MP4、AVI…

三坐標測量技術解析:從基礎原理到斜孔測量難點突破

基礎原理 三坐標測量儀(Coordinate Measuring Machine,CMM)這種集機械、電子、計算機技術于一體的三維測量設備,其核心技術原理在于:當接觸式或非接觸式測頭接觸感應到工件表面時,測量系統會瞬間記錄三個坐…

【MySQL基礎篇】:MySQL常用內置函數以及實用示例

?感謝您閱讀本篇文章,文章內容是個人學習筆記的整理,如果哪里有誤的話還請您指正噢? ? 個人主頁:余輝zmh–CSDN博客 ? 文章所屬專欄:MySQL篇–CSDN博客 文章目錄內置函數一.日期函數二.字符串函數三.數學函數四.其他函數內置函…

Mirror學習筆記

Mirror官方案例操作 一、導入Mirror 在unity商城訂閱Mirror https://assetstore.unity.com/packages/tools/network/mirror-129321 使用unity創建工程 (推薦版本:目前建議使用 Unity 2020 或 2021 LTS 版本;超出這些版本的可能可以運行…

R4周打卡——Pytorch實現 LSTM火災預測

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 一、準備工作 1.1導入數據 1.2數據集可視化 二、構建數據集 2.1數據集預處理 2.2設置X、Y 2.3檢查數據集中有沒有空值 2.4劃分數據集 三、構建模型 3.1定義訓…

【視覺識別】Ubuntu 22.04 上編譯安裝OPENCV 4.12.0 魯班貓V5

系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 例如:第一章 Python 機器學習入門之pandas的使用 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目…

基于vue的財務管理系統/基于php的財務管理系統

基于vue的財務管理系統/基于php的財務管理系統

機器學習技術在訂單簿大單檢測中的應用研究

訂單簿數據的特點 訂單簿(Order Book)是記錄市場上所有未成交買賣訂單的數據結構,通常包括價格、數量、買賣方向等信息。訂單簿數據具有以下特點: 高頻率:訂單簿數據更新速度極快,通常以毫秒甚至微秒為單位…

Spring MVC框架中DispatcherServlet詳解

1. DispatcherServlet概述1.1 什么是DispatcherServlet?DispatcherServlet是Spring MVC框架的核心組件,它本質上是一個Java Servlet,作為前端控制器(Front Controller)負責接收所有HTTP請求,并根據特定規則將請求分發到相應的處理…