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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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请求,并根据特定规则将请求分发到相应的处理…