Elasticsearch 向量检索详解

news2025/3/18 20:29:38

文章目录

  • 1、向量检索的用途
  • 2、适用场景
    • 2.1 自然语言处理(NLP):
    • 2.2 图像搜索:
    • 2.3 推荐系统
    • 2.4 音视频搜索
  • 3、向量检索的核心概念
    • 3.1 向量
    • 3.2 相似度计算
    • 3.3 向量索引
  • 4、案例:基于文本的语义搜索
  • 5、总结

向量检索是 Elasticsearch 中用于处理高维向量数据的搜索技术。它通过计算向量之间的相似度(例如余弦相似度或欧氏距离),找到与目标向量最相似的文档。向量检索广泛应用于自然语言处理(NLP)、图像搜索、推荐系统等领域。

1、向量检索的用途

  • 相似性搜索:根据向量之间的相似度,找到与目标向量最相似的文档。

  • 语义搜索:将文本转换为向量后,进行语义级别的搜索。

  • 推荐系统:根据用户行为或兴趣向量,推荐相似的内容。

  • 图像搜索:将图像特征转换为向量后,搜索相似的图像。

2、适用场景

2.1 自然语言处理(NLP):

在 NLP 领域,文本数据可以通过词嵌入模型(如 Word2Vec、BERT)转换为向量,从而实现语义级别的搜索和分析。

具体应用

  • 语义搜索:

    根据用户输入的查询文本,找到语义上最相似的文档。

    示例:搜索“人工智能”时,返回与“机器学习”“深度学习”相关的文档。

  • 问答系统:

    根据问题向量找到最相关的答案。

    示例:用户提问“如何学习编程?”,系统返回相关的学习资源。

  • 文本分类与聚类:

    将文本向量化后,进行分类或聚类分析。

    示例:将新闻文章按主题分类(如体育、科技、财经)。

2.2 图像搜索:

图像可以通过卷积神经网络(CNN)提取特征向量,从而实现基于图像内容的搜索。

具体应用

  • 图像检索:

    根据用户上传的图像,找到相似的图像。

    示例:电商平台中的“以图搜图”功能。

  • 图像分类与标注:

    将图像向量化后,进行分类或自动标注。

    示例:自动识别图像中的物体(如猫、狗、汽车)。

  • 人脸识别:

    将人脸图像转换为向量,进行人脸匹配。

    示例:安防系统中的人脸识别功能。

2.3 推荐系统

推荐系统通过分析用户行为或兴趣向量,推荐相似的内容。

具体应用

  • 基于内容的推荐:

    根据用户的历史行为(如点击、购买)生成兴趣向量,推荐相似的内容。

    示例:视频平台根据用户观看记录推荐相关视频。

  • 协同过滤:

    将用户和物品表示为向量,计算相似度后进行推荐。

    示例:电商平台根据相似用户的购买记录推荐商品。

2.4 音视频搜索

音频和视频数据可以通过特征提取转换为向量,从而实现基于内容的搜索。

具体应用

  • 音频检索:

    根据音频特征向量,搜索相似的音频。

    示例:音乐平台中的“听歌识曲”功能。

  • 视频检索:

    根据视频特征向量,搜索相似的视频。

    示例:视频平台中的“相关视频推荐”功能。

3、向量检索的核心概念

3.1 向量

向量是一个高维数组,用于表示文档的特征。

例如,文本可以通过词嵌入模型(如 Word2Vec、BERT)转换为向量,图像可以通过卷积神经网络(CNN)提取特征向量。

3.2 相似度计算

向量检索的核心是通过计算向量之间的相似度,找到最相似的文档。

常用的相似度计算方法:

  • 余弦相似度:计算两个向量之间的夹角余弦值,范围在 [-1, 1] 之间,值越大表示越相似。

  • 欧氏距离:计算两个向量之间的欧氏距离,距离越小表示越相似。

3.3 向量索引

  • Elasticsearch 使用特殊的索引结构(如 dense_vector)来存储和检索向量数据。

  • 向量索引支持高效的相似度计算和搜索。

4、案例:基于文本的语义搜索

场景描述
假设我们有一个文档集合,每个文档包含一段文本。我们希望根据用户输入的查询文本,找到语义上最相似的文档。

实现步骤

  • 文本向量化:使用预训练的词嵌入模型(如 BERT)将文本转换为向量。

  • **存储向量:**将向量存储在 Elasticsearch 的 dense_vector 字段中。

  • 向量检索:使用 script_score 查询计算查询向量与文档向量的相似度,并返回最相似的文档。

案例代码
步骤 1:定义索引映射

PUT /documents
{
  "mappings": {
    "properties": {
      "text": {
        "type": "text"
      },
      "text_vector": {
        "type": "dense_vector",
        "dims": 768  // BERT 模型的向量维度
      }
    }
  }
}

步骤 2:插入文档
假设我们已经将文本转换为向量(例如使用 BERT 模型):

POST /documents/_doc/1
{
  "text": "Elasticsearch is a distributed search engine.",
  "text_vector": [0.12, 0.34, ..., 0.56]  // 768 维向量
}

POST /documents/_doc/2
{
  "text": "Machine learning is a key technology for AI.",
  "text_vector": [0.23, 0.45, ..., 0.67]  // 768 维向量
}

步骤 3:向量检索
假设用户输入的查询文本为 “search engine technology”,我们将其转换为向量 query_vector:

POST /documents/_search
{
  "query": {
    "script_score": {
      "query": {
        "match_all": {}
      },
      "script": {
        "source": "cosineSimilarity(params.query_vector, 'text_vector') + 1.0",
        "params": {
          "query_vector": [0.11, 0.33, ..., 0.55]  // 查询向量
        }
      }
    }
  }
}

响应结果
Elasticsearch 会返回与查询向量最相似的文档,并按相似度排序:

{
  "hits": {
    "hits": [
      {
        "_id": "1",
        "_score": 0.95,
        "_source": {
          "text": "Elasticsearch is a distributed search engine.",
          "text_vector": [0.12, 0.34, ..., 0.56]
        }
      },
      {
        "_id": "2",
        "_score": 0.85,
        "_source": {
          "text": "Machine learning is a key technology for AI.",
          "text_vector": [0.23, 0.45, ..., 0.67]
        }
      }
    ]
  }
}

5、总结

Elasticsearch 的向量检索是一种强大的技术,适用于处理高维向量数据的相似性搜索。通过将文本、图像等数据转换为向量,并结合高效的相似度计算,可以实现语义搜索、图像搜索、推荐系统等复杂场景。掌握向量检索的原理和使用方法,可以帮助开发者构建更智能的搜索应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab 基于专家pid控制的时滞系统

1、内容简介 Matlab 185-基于专家pid控制的时滞系统 可以交流、咨询、答疑 2、内容说明 略 在处理时滞系统(Time Delay Systems)时,使用传统的PID控制可能会面临挑战,因为时滞会导致系统的不稳定或性能下降。专家PID控制通过结…

Unity 笔记:在EditorWindow中绘制 Sorting Layer

在Unity开发过程中,可能会对旧资源进行批量修改,一个个手动修改费人费事,所以催生出了一堆批量工具。 分享一下在此过程中绘制 Sorting Layer 面板的代码脚本。 示意图: 在 EditorGUI 和 EditorGUILayer 中内置了 SortingLayerF…

2024浙江大学计算机考研上机真题

2024浙江大学计算机考研上机真题 2024浙江大学计算机考研复试上机真题 2024浙江大学计算机考研机试真题 2024浙江大学计算机考研复试机试真题 历年浙江大学计算机复试上机真题 历年浙江大学计算机复试机试真题 2024浙江大学计算机复试上机真题 2024浙江大学计算机复试机试真题 …

蓝桥杯嵌入式赛道复习笔记2(按键控制LED灯,双击按键,单击按键,长按按键)

硬件原理解释 这张图展示了一个简单的按键电路原理图,其中包含四个按键(PB0、PB1、PB2、PB3、PA0),每个按键通过一个10kΩ的上拉电阻连接到VDD(电源电压),并接地(GND)。 …

每天五分钟深度学习PyTorch:循环神经网络RNN的计算以及维度信息

本文重点 前面我们学习了RNN从何而来,以及它的一些优点,我们也知道了它的模型的大概情况,本文我们将学习它的计算,我们来看一下RNN模型的每一个时间步在计算什么? RNN的计算 ht-1是上一时刻的输出,xt是本时刻的输入,然后二者共同计算得到了ht,然后yt通过ht计算得到,…

Ubuntu docker安装milvusdb

一、安装docker 1.更新软件包 sudo apt update sudo apt upgrade sudo apt-get install docker-ce docker-ce-cli containerd.io查看是否安装成功 docker -v二、使用国内的镜像下载 milvusdb Docker中国区官方镜像: https://registry.docker-cn.com milvusdb/milvus - Doc…

【优选算法篇】--深度解析之滑动窗口篇

滑动窗口 一、长度最小的子数组二、无重复字符的最长子串三、最大连续1的个数III四、水果成篮 一、长度最小的子数组 长度最小的子数组 解析: 首先看到这题 我们首先想到的是暴力枚举,就是暴力枚举所有子数组和。时间复杂度是O(n^3)。 我们这里用解法…

[STM32]新建工程||一个工程文件应该有哪些基本内容?

目录 一 、开发方法 1.直接使用程序来配置寄存器 2.基于库函数的方式 3.基于HAL库的方式 二 、常规的工程文件分类 STM32芯片型号分类以及缩写 ​三 步骤总结 四 工程架构 五 调用外设基本通用步骤 一 、开发方法 1.直接使用程序来配置寄存器 底层,直接&…

python编写的一个打砖块小游戏

游戏介绍 打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失…

【菜鸟飞】通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)

目标 通过vsCode用python访问deepseek。 环境准备 没有环境的,vscode环境准备请参考之前的文章,另外需安装ollama: 【菜鸟飞】用vsCode搭建python运行环境-CSDN博客 AI入门1:AI模型管家婆ollama的安装和使用-CSDN博客 选读文章…

Figma介绍(基于云的协作式界面设计工具,主要用于UI/UX设计、原型制作和团队协作)

文章目录 注册和登录简单操作说明Figma介绍**核心特点**1. **云端协作与实时同步**2. **跨平台兼容**3. **高效设计工具**4. **原型交互与动效**5. **开发对接友好**6. **插件生态**7. **版本控制与历史记录** **适用场景**- **团队协作**:远程团队共同设计、评审、…

Text-to-SQL将自然语言转换为数据库查询语句

有关Text-To-SQL方法,可以查阅我的另一篇文章,Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言,这段时间公司有这方面的需求,调研了一下市面上text2sql的方法,比如阿里的Chat2DB,麻…

XSS漏洞靶场---(复现)

XSS漏洞靶场—(复现) 反射型 XSS 的特点是攻击者诱导用户点击包含恶意脚本的 URL,服务器接收到请求后将恶意脚本反射回响应页面,浏览器执行该脚本从而造成攻击,恶意脚本不会在服务器端存储。 Level 1(反射型XSS) 此漏…

基于ssm的电子病历系统(全套)

一、系统架构 前端:jsp | bootstrap | jquery 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…

Linux-数据结构-线性表-单链表

一.链表的概念 【1】线性表的链式存储 解决顺序存储的缺点,插入和删除,动态存储问题。 【2】特点: 线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存…

基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别

【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目,以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别(应该还有好多种其他方式是我不知道的,主要应该就是要知道关键的流程步骤&#xff…

大数据学习(68)- Flink和Spark Streaming

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

Fastdata极数:中国民宿行业发展趋势报告2025

2024年,中国游客出行次数大幅上涨,旅游相关支出也复苏强劲。2025年中国旅游业还将持续稳健的复苏及增长。同时,中国旅游业将见证一场深刻的变革,这场变革的推动力是消费者对旅游期望的转变,经济因素和年轻人全新价值观…

图论——广度优先搜索实现

99. 岛屿数量 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述 第一行包含两个整数 N, M,表示矩阵的行数和列数。 后续 N 行,每行…

鸿蒙路由 HMrouter 配置及使用一

1、学习链接 HMRouter地址 https://gitee.com/hadss/hmrouter/blob/dev/HMRouterLibrary/README.md 2、工程配置 下载安装 ohpm install hadss/hmrouter 添加编译插件配置 在工程目录下的build-profile.json5中,配置useNormalizedOHMUrl属性为true (我这项目创…