Elasticsearch:什么是向量数据库?

news2025/3/10 21:27:48

向量数据库定义

向量数据库是将信息存储为向量的数据库,向量是数据对象的数值表示,也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据(例如图像、文本或传感器数据)的海量数据集进行索引和搜索。 向量数据库是为了管理向量嵌入而构建的,因此为非结构化和半结构化数据的管理提供了完整的解决方案。

向量数据库与向量搜索库或向量索引不同:它是一种数据管理解决方案,支持元数据存储和过滤、可扩展、允许动态数据更改、执行备份并提供安全功能。

向量数据库通过高维向量来组织数据。 高维向量包含数百个维度,每个维度对应于它所表示的数据对象的特定特征或属性。

什么是向量嵌入?

向量嵌入是主题、单词、图像或任何其他数据的数字表示。 向量嵌入(也称为嵌入)由大型语言模型和其他人工智能模型生成。

每个向量嵌入之间的距离使向量数据库或向量搜索引擎能够确定向量之间的相似性。 距离可以代表数据对象的多个维度,从而使机器学习和人工智能能够理解模式、关系和底层结构。

了解如何部署文本嵌入

更多关于向量嵌入的知识,请阅读文章 “Elasticsearch:什么是向量嵌入?”。

向量数据库如何工作?

向量数据库通过使用算法来索引和查询向量嵌入来工作。 该算法通过哈希、量化或基于图的搜索来实现近似最近邻 (ANN) 搜索。

为了检索信息,人工神经网络搜索会找到查询的最近向量邻居。 与 kNN 搜索(已知最近邻,或真正的 k 最近邻算法)相比,计算强度较小,近似最近邻搜索的准确度也较低。 然而,它对于高维向量的大型数据集可以高效且大规模地工作。

向量数据库管道如下所示:

1)索引:通过哈希、量化或基于图的技术,向量数据库通过将向量映射到给定的数据结构来对向量进行索引。这使得搜索速度更快。

  • 哈希:哈希算法,比如局部敏感哈希(LSH)算法,最适合进行近似最近邻搜索,因为它能够提供快速而近似的结果。LSH 使用哈希表(类似数独谜题)来映射最近邻。查询将被哈希到一个表中,然后与同一表中的一组向量进行比较,以确定相似性。
  • 量化:量化技术,比如产品量化(PQ),将向量分解为较小的部分,并用代码表示这些部分,然后将部分重新组合。结果是向量及其组件的代码表示。这些代码的集合被称为码书(codebook)。在查询时,使用量化的向量数据库将查询分解为代码,然后与码书进行匹配,以找到最相似的代码生成结果。
  • 基于图:图算法,比如分层可导航小世界(HNSW)算法,使用节点表示向量。它对节点进行聚类,并在相似节点之间绘制线条或边缘,创建层次图。当发起查询时,算法将导航图层次结构,以找到包含与查询向量最相似的向量的节点。

向量数据库还将索引数据对象的元数据。 因此,向量数据库将包含两个索引:向量索引和元数据索引。

2)查询:当向量数据库收到查询时,它将索引向量与查询向量进行比较,以确定最近的向量邻居。 为了建立最近邻,向量数据库依赖于称为相似性度量的数学方法。 存在不同类型的相似性方法:

  • 余弦相似度在 -1 到 1 的范围内建立相似度。通过测量向量空间中两个向量之间的角度的余弦,它可以确定向量是完全相反的(用 -1 表示)、正交的(用 0 表示)或 相同(用 1 表示)。
  • 欧氏距离通过测量向量之间的直线距离来确定 0 到无穷大范围内的相似度。 相同的向量用0表示,而较大的值表示向量之间的差异较大。
  • 点积相似性方法确定负无穷大到无穷大范围内的向量相似性。 通过测量两个向量的大小和它们之间角度的余弦的乘积,点积将负值分配给彼此远离的向量,将 0 分配给正交向量,将正值分配给指向相同方向的向量。


3)后处理:向量数据库管道中的最后一步有时是后处理或后过滤,在此期间向量数据库将使用不同的相似性度量来重新排列最近的邻居。 在此阶段,数据库将根据元数据过滤搜索中识别的查询最近邻居。

某些向量数据库可能会在运行向量搜索之前应用过滤器。 在这种情况下,它被称为预处理或预过滤。

为什么向量数据库很重要?

向量数据库很重要,因为它们保存向量嵌入并支持一系列功能,包括索引、距离度量和相似性搜索。 换句话说,向量数据库专门用于非结构化数据和半结构化数据的管理。 因此,向量数据库是机器学习和人工智能数字领域的重要工具。

向量数据库核心组件

向量数据库可能具有以下核心组件:

  • 性能和容错:分片和复制过程确保向量数据库的高性能和容错性。 分片涉及跨多个节点对数据进行分区,而复制涉及跨不同节点制作数据的多个副本。 如果节点发生故障,这可以实现容错和持续的性能。
  • 监控能力:为了确保性能和容错能力,向量数据库需要监控资源使用情况、查询性能和整体系统运行状况。
  • 访问控制能力:向量数据库也需要数据安全管理。 访问控制监管可确保合规性、责任性以及审核数据库使用情况的能力。 这也意味着数据受到保护:拥有权限的人可以访问数据,并且保留用户活动的记录。
  • 可扩展性和可调性:良好的访问控制功能会影响向量数据库的可扩展性和可调性。 随着存储数据量的增加,水平扩展的能力变得必不可少。 不同的插入和查询速率以及底层硬件的差异都会影响应用程序的需求。
  • 多用户和数据隔离:在具备可扩展性和访问控制功能的同时,向量数据库应该能够容纳多用户或多租户。 与此相一致,向量数据库应该启用数据隔离,以便任何用户活动(例如插入、删除或查询)对其他用户保持私有 —— 除非另有要求。
  • 备份:向量数据库创建定期数据备份。 这是向量数据库在系统发生故障时的关键组件 —— 在数据丢失或数据损坏的情况下,备份可以帮助将数据库恢复到以前的状态。 这可以最大限度地减少停机时间。
  • API 和 SDK:向量数据库使用 API 来实现用户友好的界面。 API 是一种应用程序编程接口或一种软件,它使应用程序能够通过请求和响应相互 “对话”。 API 层简化了向量搜索体验。 SDK(即软件开发工具包)通常包含 API。 它们是数据库用于通信和管理的编程语言。 SDK 有助于开发人员友好地使用向量数据库,因为它们在开发特定用例(语义搜索、推荐系统等)时不必担心底层结构。

向量数据库和传统数据库有什么区别?

传统数据库以表格形式存储信息,并通过为数据点分配值来索引数据。 当查询时,传统数据库将返回与查询完全匹配的结果。

向量数据库以嵌入的形式存储向量并启用向量搜索,向量搜索根据相似性指标(而不是精确匹配)返回查询结果。 向量数据库在传统数据库无法做到的地方“提升”了:它被有意设计为与向量嵌入一起操作。

向量数据库也比传统数据库更适合某些应用,例如相似性搜索、人工智能和机器学习应用,因为它支持高维搜索和定制索引,并且具有可扩展性、灵活且高效。

向量数据库的应用

向量数据库用于人工智能、机器学习 (ML)、自然语言处理 (NLP) 和图像识别应用。

  • AI/ML应用:向量数据库可以通过语义信息检索和长期记忆来提高 AI 能力。
  • NLP 应用:向量相似性搜索是向量数据库的关键组成部分,对于自然语言处理应用非常有用。 向量数据库可以处理文本嵌入,这使计算机能够 “理解” 人类或自然语言。
  • 图像识别和检索应用:向量数据库将图像转换为图像嵌入。 通过相似性搜索,他们能够检索相似的图像或识别匹配的图像。

向量数据库还可以服务于异常检测和人脸检测应用。

向量数据库的未来趋势

向量数据库的未来与人工智能和机器学习的发展以及与使用深度学习为结构化和非结构化数据生成更强大的嵌入相关的研究密切相关。

随着创建更好嵌入的能力的提高,向量数据库更好地处理和管理这些嵌入的能力需要新的技术和算法。 事实上,此类新方法一直在开发中。

其他研究致力于混合数据库的开发。 这些旨在结合传统关系数据库和矢量数据库的强大功能,以满足对高效和可扩展数据库日益增长的需求。

Elasticsearch 的向量数据库

Elasticsearch 包含一个用于向量搜索的向量数据库。 Elastic 使开发人员能够使用 Elasticsearch 相关性引擎 (ESRE) 构建自己的向量搜索引擎。

借助 Elasticsearch 工具,你可以构建一个向量搜索引擎,该引擎可以搜索非结构化和结构化数据、应用过滤器和分面、对文本和矢量数据应用混合搜索,并利用文档和字段级安全性,同时在本地运行 云或混合环境中。

探索 Elasticsearch 向量数据库

向量数据库资源

  • Elasticsearch 向量数据库
  • Elastic 的向量搜索原理
  • 阅读有关 ANN 算法的更多信息
  • 了解如何实现图像相似度搜索

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

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

相关文章

简明指南:使用Kotlin和Fuel库构建JD.com爬虫

概述 爬虫,作为一种自动化从网络上抓取数据的程序,广泛应用于数据分析、信息提取以及竞争对手监控等领域。不同的实现方式和编程语言都能构建出高效的爬虫工具。在本文中,我们将深入介绍如何充分利用Kotlin和Fuel库,构建一个简单…

Autosar COM通信PDU

文章目录 Autosar 中各个PDU所在示意图PDU的分类PDU 和 SDU 的关系I-PDUN-PDUL-PDU相关协议其他参考 Autosar 中各个PDU所在示意图 PDU的分类 在Autosar 中,主要有 I-PDU、N-PDU和 L-PDU 三种。 L-PDU:Data Link Layer PDU,数据链路层PDUN-…

Qt/QML编程学习之心得:如何添加资源文件到QML工程(十一)

Qt作为一种GUI界面编辑工具,在嵌入式编程中也大受欢迎,而进一步QML出现了,QML我理解也是一种资源文件,因为像其他资源文件一样添加进工程的。那么一个图片如何增加进资源文件呢?这个的确很基础,就是把资源文…

JavaEE 多线程

JavaEE 多线程 文章目录 JavaEE 多线程引子多线程1. 特性2. Thread类2.1 概念2.2 Thread的常见构造方法2.3 Thread的几个常见属性2.4 启动一个线程2.5 中断一个线程2.6 等待一个线程2.7 获取当前线程引用2.8 休眠当前线程 3. 线程状态 引子 当进入多线程这一块内容时&#xff…

Redis中分布式锁的使用

在分布式系统中,如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题,有这样一个案例,有一件商品购买规则为一个用户只能购买一次,如果使用同步锁锁住用户id&am…

vue3中自定义hook函数

使用Vue3的组合API封装的可复用的功能函数 自定义hook的作用类似于vue2中的mixin技术 自定义Hook的优势: 很清楚复用功能代码的来源, 更清楚易懂 案例: 收集用户鼠标点击的页面坐标 hooks/useMousePosition.ts文件代码: import { ref, onMounted, onUnmounted …

【读书笔记】微习惯

周日晚上尝试速读一本书《微习惯》,共七章看了下目录结构并不复杂,计划每章7-8分钟读完, 从20:15-21:00。读的时候,订下闹钟,催促着自己的进度。边读边记了一些要点和微信读书里面的划线。 第六章实践内容最为丰富&…

1949-2021年全国31省铁路里程数据

1949-2021年全国31省铁路里程数据 1、时间:1949-2021年 2、指标:时间、省份、铁路里程 3、范围:包括31省 4、数据缺失情况说明:西藏2005年之前存在缺失,其余30省份1978-2020年无缺失 5、来源:各省统计…

C++实现DFS、BFS、Kruskal算法和Prim算法、拓扑排序、Dijkstra算法

背景: 实现要求: 根据图的抽象数据类型的定义,请采用邻接矩阵来存储图1,采用邻接表来存储图2,并完成如下操作:对图1无向图进行深度优先遍历和广度优先遍历。对图1无向图采用Kruskal算法和Prim算法得出最小…

uni-app 微信小程序之自定义navigationBar顶部导航栏

文章目录 1. 实现效果2. App.vue3. pages.json 配置自定义4. 顶部导航栏 使用 微信小程序自定义 navigationBar 顶部导航栏,兼容适配所有机型 1. 实现效果 2. App.vue 在App.vue 中,设置获取的 StatusBar,CustomBar 高度(实现适配…

【云原生Prometheus篇】Prometheus PromQL语句详解 1.0

文章目录 一、前言1.1 Prometheus的时间序列1.1.1 指标名称1.1.2 标签1.1.3 使用的注意事项 1.2 样本数据格式1.3 Prometheus 的聚合函数 二 、PromQL 理论部分2.1 PromQL简介2.2 PromQL的数据类型2.3 时间序列选择器2.3.1 瞬时向量选择器 (Instant Vector Selector…

python装饰器解析(关键点:高阶函数、嵌套函数)(参数化装饰器、类装饰器)

文章目录 Python装饰器解析什么是Python装饰器基础理解 如何创建装饰器(关键点:高阶函数、嵌套函数)创建基础装饰器 使用装饰器使用示例 装饰器的返回值参数化装饰器创建参数化装饰器语法示例使用示例 类装饰器创建类装饰器语法示例使用示例 …

使用postman请求x5接口

x5接口简介 1.接口样例 {"header"{"appid":"bpmnew_fanwei","sign":"C033162E86E4CADE80C7EB44D68A5AD2","sign_type":"md5","url":"https://oa.mioffice.cn/api/bpm/xm/app/show/tod…

MySQL索引优化实战二

分页查询优化 很多时候我们业务中实现分页功能时可能会用如下SQL来实现: select * from employees LIMIT 10000,10表示从表中中区从10001行开始的10行记录,看似只查了10条记录,但是这条SQL是先读取10010条记录,然后抛弃前10000条…

【个人笔记】-python-强化学习-类-在内存中的值

{int} 数值 {int} 200 {float} 数值 {float} 0.9 {narray:维度} 数值 {narray:(1,)} [2.] {bool} True {bool} False {类名} 对象1 {类名} 对象2

LLM 开发模式 RAG,MRKL,Re-Act,Plan-Execute 模式对比

本心、输入输出、结果 文章目录 LLM 开发模式 RAG,MRKL,Re-Act,Plan-Execute 模式对比前言RAG、MRKL、Re-Act和Plan-Execute模式的一些对比花有重开日,人无再少年实践是检验真理的唯一标准 LLM 开发模式 RAG,MRKL&…

MySQL进阶_EXPLAIN重点字段解析

文章目录 第一节.准备1.1 版本信息1.2 准备 第二节.type2.1 system2.2 const2.3 eq_ref2.4 ref2.5 ref_or_null2.6 index_merge2.7 unique_subquery2.8 range2.9 index2.10 all 第三节. Extra3.1 No tables used3.2 No tables used3.3 Using where3.4 No matching min/max row3…

基于springboot实现的垃圾分类管理系统

一、系统架构 前端:html | layer | jquery | css 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven 二、 代码及数据库 三、功能介绍 01. 登录页 02. 系统设置-用户管理 03. 系统设置-页面管理 04. 系统设置-角色管…

Python练习题(二)

📑前言 本文主要是【Python】——Python练习题的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&am…

三极管在数字电路中的应用

一、认识三极管 三极管拥有3个引脚,分别对应3个级:基极(Base)、发射极(Emitter)、集电极(Collector),如下图所示;下图横向左侧的是基极,带箭头的那个引脚就是发射极,另一个就是集电…