Elasticsearch向量数据存储与搜索

1. 向量数据存储

    Elasticsearch 支持向量数据类型,可以通过 dense_vector 字段类型来存储固定长度的浮点数数组,这些数组通常代表向量。这种类型的字段可以用于机器学习模型的特征向量存储。

创建带有向量字段的索引
PUT /my_index
{"mappings": {"properties": {"my_vector": { "type": "dense_vector","dims": 3  // 向量的维度大小。当index为true时,不能超过1024;当index为false时,不能超过2048 。},"my_text": {"type": "keyword"}}}
}

   在这个例子中,我们创建了一个名为 my_index 的索引,其中包含一个名为 my_vectordense_vector 字段,该字段用于存储 3 维的向量,还可以添加一些内容比如my_text。

向索引中添加向量数据
POST /my_index/_doc/1
{"my_text": "一段文字描述的内容","my_vector": [4.0, 3.5, 2.5]
}

   这将向 my_index 索引中添加一个文档,其中包含一个向量和一些文本。

2. 向量数据搜索

    Elasticsearch 允许使用向量字段执行余弦相似度、欧氏距离或点积等相似度度量的搜索查询。

使用脚本查询进行向量相似度搜索

GET /my_index/_search
{"query": {"script_score": {"query": {"match_all": {}},"script": {"source": "cosineSimilarity(params.query_vector, 'my_vector') + 1.0","params": {"query_vector": [4, 3.5, 2.5]}}}}
}

   在此查询中,我们使用了 script_score 查询以计算每个文档的 my_vector 字段与查询向量之间的余弦相似度。+1.0 是为了确保脚本返回的分数是非负的,因为余弦相似度的范围是 [-1, 1]。

     注意:向量字段下index参数设置false或不要指定,可提高检索效率

使用KNN查询进行向量相似度搜索

    注意:创建近似KNN时(近似KNN搜索是在8.0版本新增的),索引mapping必须设置index为true,并指定similarity参数值,Mapping如下

{"mappings": {"properties": {"file-vector": {"type": "dense_vector",//用来存储浮点数的密集向量。需要设置为dense_vector。"dims": 3,//向量的维度大小。当index为true时,不能超过1024;当index为false时,不能超过2048 。"index": true,//是否为kNN生成新的索引。实现近似kNN查询时,需要将index设置为true,默认为false。"similarity": "l2_norm"//文档间的相似度算法。index为true时,此值必须设置,可以是 l2_norm 、dot_product、cosine 其中之一},"title": {"type": "text"},"name": {"type": "keyword"}}}
}

  检索

{"knn": {"field": "file-vector","query_vector": [-5, 9, -12],"k": 10,"num_candidates": 100},"fields": [ "title", "name" ]
}
参数是否必选说明
field要搜索的向量字段名称。必须是向量字段
query_vector查询向量,必须与field指定的向量数据具有相同的维度。
k返回的最近邻对象的数量。该值必须小于 num_candidates
num_candidates每个分片上需查找的最近邻候选对象的个数,不能超过10000。 Elasticsearch 从每个分片收集 num_candidates 个结果,然后将它们合并以查找前 k 个结果。

说明

增加 num_candidates 往往会提高最终 k 结果的准确性,但相应搜索速度会变慢

filter通过DSL语句过滤文档。kNN从过滤后的文档中返回前K个文档,如果不指定过滤器,将对所有文档做kNN近似计算。

更详细的可以看这里

使用脚本查询Vs使用KNN查询

  KNN查询:

          近似kNN以较慢的索引速度和较低的准确性为代价来降低延迟,但无法与 Query DSL 一起使用,即无法进行混合搜索。。

          适用于大规模数据集: KNN搜索对大规模数据集进行相似性搜索时具有较好的性能。

  脚本查询:

         这种搜索方式是先执行 query ,然后对匹配的文档再进行向量相似度算分,其隐含的含义是:

  • 向量字段可以与其它字段类型一起使用,也就是支持混合查询(先进行全文搜索,再基于搜索结果进行向量搜索)。
  • script_score 是一种暴力计算,数据集越大,性能损耗就越大。

总结

    Elasticsearch的KNN搜索提供了一种高效的方法来找到最相似的文档,搜索速度非常快,但可能会受到资源消耗影响。而"script_score"查询则提供了更大的灵活性和复杂度控制且精确度高,但可能会带来性能开销和可维护性的问题。选择哪种方法取决于特定的用例、性能要求和技术能力。

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

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

相关文章

机器学习算法决策树

决策树的介绍 决策树是一种常见的分类模型,在金融风控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法。例如在婚恋市场中,女方通常会先询问男方是否有房产&a…

2024.2.1日总结

web的运行原理: 用户通过浏览器发送HTTP请求到服务器(网页操作)。web服务器接收到用户特定的HTTP请求,由web服务器请求信息移交给在web服务器中部署的javaweb应用程序(Java程序)。启动javaweb应用程序执行…

k8s之基础组件说明

前言 K8S,全称 Kubernetes,是一个用于管理容器的开源平台。它可以让用户更加方便地部署、扩展和管理容器化应用程序,并通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。 具体来说,Kubernetes 可以将应用程序打包成…

2024年美赛C题:Momentum in Tennis思路解析

Problem C: Momentum in Tennis 网球运动中的动力 【扫描下方二维码加入群聊,了解更多思路~】 中文题目: 在2023年温布尔登男子单打决赛中,20岁的西班牙新星卡洛斯阿尔卡拉斯击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来在温布…

RFID技术的应用在汽车座椅加工中的优势

RFID技术的应用在汽车座椅加工中的优势 在传统的汽车座椅加工过程中,需要人工核对和记录座椅的信息,如型号、序列号、生产日期等。这种方式不仅效率低下,而且容易出错。而通过使用RFID技术,这些问题得到了有效解决。 在座椅的生…

使用VScode编译betaflight固件--基于ubuntu平台

使用VScode编译betaflight固件--基于ubuntu平台 1、使用git克隆betaflight的开源代码2、配置编译环境3、使用VScode编译代码 window平台的见上一篇文章 使用VScode编译betaflight固件–基于windows平台 本文主要介绍在linux系统 ubuntu平台下使用VScode编译betaflight固件的方法…

C++集群聊天服务器 网络模块+业务模块+CMake构建项目 笔记 (上)

跟着施磊老师做C项目&#xff0c;施磊老师_腾讯课堂 (qq.com) 一、网络模块ChatServer chatserver.hpp #ifndef CHATSERVER_H #define CHATSERVER_H#include <muduo/net/TcpServer.h> #include <muduo/net/EventLoop.h> using namespace muduo; using namespace …

jsp 产品维修管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 产品维修管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.…

如何使用内网穿透工具在公网实现实时监测DashDot服务器仪表盘

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务…

2024 TikTok Shop本土店入驻流程全解,建议收藏

如果要在2023选出最具潜力的跨境电商平台&#xff0c;TikTok Shop无疑是一个佼佼者。从上线全托管模式初出锋芒&#xff0c;再到遭遇印尼、东南亚政策打击&#xff0c;最后在黑五电商大促中取得辉煌成绩。2024TikTok势必是红海一片&#xff0c;现在上车还来得及&#xff01;下面…

算法学习-匈牙利算法

例题&#xff1a; 题目&#xff1a;活动 - AcWing 二分图的最大匹配 给定一个二分图&#xff0c;其中左半部包含 n1 个点&#xff08;编号 1∼n1&#xff09;&#xff0c;右半部包含 n2 个点&#xff08;编号 1∼n2&#xff09;&#xff0c;二分图共包含 m条边。 数据保证任意…

python实现的LDA算法

实现LDA算法需要用到一些数学和概率统计的知识&#xff0c;你需要根据LDA算法的具体公式&#xff0c;实现初始化模型参数、Gibbs采样、模型参数更新等具体的步骤。同时&#xff0c;还需要读取训练文件和词典文件&#xff0c;以及保存模型到文件的功能。 理解LDA算法的实现思路…

SpringBoot security 安全认证(三)——自定义注解实现接口放行配置

背景&#xff1a;通过Security实现了安全管理&#xff0c;可以配置哪些接口可以无token直接访问。但一个麻烦就是每增加一个匿名访问接口时都要去修改SecurityConfig配置&#xff0c;从程序设计上讲是不太让人接受的。 本节内容&#xff1a;即是解决以上问题&#xff0c;增加一…

新媒体运营-背景分析(个人)篇

背景分析&#xff08;个人&#xff09; 1 、我为什么要拍抖音&#xff1f; &#xff08;初心&#xff09; 我有口才&#xff1f;有才艺&#xff1f;想记录自己的成长故事&#xff1f;宣传产品&#xff1f;我有工厂&#xff0c;看能不能有更多合作机会&#xff1f; 2 、我拍抖音…

Model Checking Guided Testing for Distributed Systems——论文泛读

EuroSys 2023 Paper 论文阅读笔记整理 问题 分布式系统已成为云计算的支柱&#xff0c;不正确的系统设计和实现可能严重影响分布式系统的可靠性。尽管使用形式化规范建模的分布式系统设计可以通过形式化模型检查进行验证&#xff0c;但要弄清其相应的实现是否符合已验证的规范…

【EI会议征稿通知】第三届信号处理与通信安全国际学术会议(ICSPCS 2024)

第三届信号处理与通信安全国际学术会议&#xff08;ICSPCS 2024&#xff09; 2024 3rd International Conference on Signal Processing and Communication Security 信号处理和通信安全是现代信息技术应用的重要领域&#xff0c;近年来这两个领域的研究相互交叉促进&#xf…

云贝教育 | 【技术文章】Oracle 19c RAC修改网络

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、和未经注明出处的转载。 原文链接&#xff1a;【Oracle 19c】Oracle 19c RAC修改网络 - 课程体系 - 云贝教育 (yunbee.net) 变更目标 ip类型 节点 原IP 目…

【机器学习】贝叶斯垃圾邮件识别

实验三&#xff1a;贝叶斯垃圾邮件识别 本次作业以垃圾邮件分类任务为基础&#xff0c;要求提取文本特征并使用朴素贝叶斯算法进行垃圾邮件识别&#xff08;调用已有工具包或自行实现&#xff09;。 1 任务介绍 ​ 电子邮件是互联网的一项重要服务&#xff0c;在大家的学习、…

【ADI 知识库】X 波段相控阵开发平台 硬件 2

ADAR1000EVAL1Z (Stingray) ADAR1000-EVAL1Z评估板是一款模拟波束成形前端&#xff0c;设计用于测试ADAR1000和ADTR1107的性能。ADAR1000 是一款 8 GHz 至 16 GHz、4 通道、X 波段和 Ku 波段波束成形器 IC。ADTR1107是 6 GHz 至 18 GHz 前端发送/接收模块。 ADAR1000-EVAL1Z板…

【Java系列】Java 8 日期/时间 API 简介

目录 1. 概述 2. 现有日期/时间 API 的问题 3. 使用 LocalDate/LocalTime/LocalDateTime API 3.1 LocalDate 3.2 LocalTime 3.3 LocalDateTime 4. 使用 ZonedDateTime API 5. 使用 Period and Duration API 5.1 Period 5.2 Duration 6. 与 Date 和 Calendar 的兼容性…