使用 OpenSearch 的 K-NN 向量搜索来增强搜索功能
使用 OpenSearch 的 K-NN 向量搜索来增强搜索功能
许多应用程序都依赖于提供精确且相关的搜索结果的能力。尽管传统关系数据库的全文搜索功能在某些情况下已经足够,但这些数据库在从文本中提取语义含义或搜索结构化程度较低的数据方面可能会出现不足。在这篇博文中,我们将探讨如何使用 DigitalOcean 管理的 OpenSearch 和一组称为 K-Nearest Neighbor 向量搜索 (K-NN) 的技术来解决这些限制。K-NN 使 OpenSearch 成为各种搜索和分析应用程序的强大而灵活的解决方案。
理解 K-NN 向量搜索
什么是 K-NN 向量搜索?
与依赖关键字匹配的传统搜索方法不同, K-NN 向量搜索 涉及将数据集中的每条记录表示为 封装 记录属性的向量。机器学习模型通常用于将数据 嵌入 到向量表示中。进行查询时,搜索引擎会计算查询向量与数据向量之间的距离,并根据预定义的距离度量(例如欧几里得距离或余弦相似度)返回最近邻。
为什么使用 OpenSearch 进行 K-NN 向量搜索?
OpenSearch 简介
OpenSearch 是一款高度可扩展的开源搜索和分析引擎。它以 Elasticsearch 的优势为基础,提供强大的全文搜索、日志分析等功能。随着向量搜索功能的引入,OpenSearch 将其实用性扩展到更高级的用例,例如自然语言处理、推荐系统和图像检索。
使用OpenSearch进行向量搜索的好处
可扩展性: 开放搜索能够高效处理大量数据和查询。使用近似最近邻算法,开放搜索能够以更快的速度提供相关搜索结果,且占用的内存更少。
灵活性: 支持各种类型的数据和搜索功能,适用于各种应用程序。
社区和支持: 作为开源软件,它受益于活跃的社区和定期的更新。
设置 OpenSearch 进行 K-NN 向量搜索
安装 OpenSearch
首先,您需要安装 OpenSearch。以下是提取并运行最新版本的 OpenSearch Docker 映像的基本命令:
docker pull opensearchproject/opensearch:latest
docker run -d --name opensearch -p 9200:9200 -e "discovery.type=single-node" -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=<your-strong-password>” opensearchproject/opensearch:latest
注意: 尝试运行 opensearch docker 容器时,需要设置初始管理员密码。该密码至少应为 8 个字符,并且必须至少包含一个大写字母、一个小写字母、一个数字和一个强特殊字符。
配置OpenSearch进行向量搜索
安装 OpenSearch 后,下一步是启用 K-NN 插件。在自管理集群上,这涉及修改集群的配置文件。
实现 K-NN 向量搜索
要使用 K-NN 向量搜索,您必须首先创建带有向量字段的索引。您可以通过导航到 Opensearch 开发控制台并 提交以下请求https:// {CLUSTER_HOST}:9200 。
PUT /my_vector_index
{
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "K-NN_vector",
        "dimension": 128
      }
    }
  }
}
通过此请求,您创建了一个索引 my_vector_index ,您可以使用该索引使用 128 维嵌入来存储和查询数据。现在,您可以使用以下请求开始将文档及其向量表示添加到索引中。
PUT /my_vector_index/_doc/1
{
  "my_vector": [0.1, 0.2, ... , 0.128],
  "description": "Sample document"
}
最后,要对这些文档执行 K-NN 搜索,您可以使用以下查询。
POST /my_vector_index/_search
{
  "size": 5,
  "query": {
    "K-NN": {
      "my_vector": {
        "vector": [0.1, 0.2, ... , 0.128],
        "k": 5
      }
    }
  }
}
用例和应用
让我们介绍一些可以利用 Opensearch 的 K-NN 功能的端到端应用程序。
客户支持聊天机器人: 向量搜索通常用于查找语义相似的文本。聊天机器人服务可能会使用机器学习模型将传入查询(例如“如何重置密码?”)嵌入到向量中,然后使用 K-NN 向量搜索在知识库中查找类似查询,例如“我忘记了密码,如何重置?”。聊天机器人可以使用此信息根据这些类似查询为用户提供更有帮助的响应。
电子商务平台: K-NN 向量搜索可以根据向量表示查找与用户偏好相似的项目,从而增强推荐系统。例如,从网上商店购买书籍的用户可能会被推荐同一作者的其他书籍、同一类型的书籍,甚至是具有类似偏好的其他用户购买的书籍。在此示例中,书籍的向量表示可能包括作者、类型、评分和评论中的关键字等属性。
时尚零售商: 通过使用深度学习模型将图像转换为矢量,K-NN 矢量搜索可用于从数据库中检索视觉上相似的图像。用户可以上传一张红色连衣裙的照片。系统处理该图像以创建代表连衣裙视觉特征的矢量。使用 K-NN 矢量搜索,平台检索并显示具有各种红色色调、相似剪裁和设计的类似连衣裙,帮助用户准确找到他们想要的东西。
使用 K-NN 与 OpenSearch 的挑战和注意事项
1. 向量维数 高维向量会导致计算复杂度增加。平衡向量维数和性能要求非常重要。幸运的是,OpenSearch 有多种 K-NN 方法 ,它们都有各自的性能特征。虽然每种方法都旨在返回与传入向量距离最小的向量,但有些方法可以进行调整,以优先考虑内存使用、响应时间或准确性。
2.数据规范化 确保数据规范化和一致性对于K-NN搜索结果的准确性至关重要。
3. 性能调优 优化 OpenSearch 设置和硬件资源对于高效处理大规模向量搜索至关重要。
结论
K-NN 向量搜索为跨不同领域提供高度相关的搜索结果开辟了新的可能性。通过利用 OpenSearch 的强大功能,开发人员可以相对轻松地实现高级搜索功能。无论是用于推荐系统、图像检索还是 NLP 应用程序,OpenSearch 的 K-NN 向量搜索都是搜索技术领域的宝贵工具。
原文链接:https://www.digitalocean.com/blog/enhancing-search-capabilities-with-k-nn-vector-search-in-opensearch?ref=dailydev
本文由 mdnice 多平台发布
相关文章:
使用 OpenSearch 的 K-NN 向量搜索来增强搜索功能
使用 OpenSearch 的 K-NN 向量搜索来增强搜索功能 许多应用程序都依赖于提供精确且相关的搜索结果的能力。尽管传统关系数据库的全文搜索功能在某些情况下已经足够,但这些数据库在从文本中提取语义含义或搜索结构化程度较低的数据方面可能会出现不足。在这篇博文中&…...
 
Less-2(闭合)
我们使用第一关的测试方法尝试一下,打咩 直接看源码,看到,尝试一下闭合 <?php ini_set("display_errors", 0); $str $_GET["keyword"]; echo "<h2 aligncenter>没有找到和".htmlspecialchars($str)."相…...
 
mysql介绍
MySQL是一种开源的关系型数据库管理系统(RDBMS),广泛用于存储和管理数据。它支持多种操作系统,如Linux、Windows、MacOS等。MySQL的特点包括: 1.开源免费:MySQL是开源的,可以免费使用和分发。 2…...
【ROS学习】ROS中 use_sim_time 参数的含义与作用
文章目录 写在前面一、背景描述二、 use_sim_time 参数的含义与作用三、举例说明1. 不设置use_sim_time (也即 use_sim_time false),播放数据集使用rosbag play **.bag 2. 不设置use_sim_time (也即 use_sim_time false),播放数据集使用rosbag play **…...
 
python-查找元素3(赛氪OJ)
[题目描述] 有n个不同的数,从小到大排成一列。现在告诉你其中的一个数x,x不一定是原先数列中的数。你需要输出最后一个<x的数在此数组中的下标。输入: 输入共两行第一行为两个整数n、x。第二行为n个整数,代表a[i]。输出&#x…...
 
苹果 Safari 的隐私保护与广告追踪问题 :技术进展与挑战
隐私保护的进展与挑战 近年来,浏览器行业在隐私保护技术方面取得了显著进展,尤其是在广告追踪领域。谷歌的 Chrome 浏览器推广了隐私沙盒,通过将用户可能感兴趣的主题分类并推送给广告商。Mozilla Firefox 和 Meta Facebook 则推出了一种名为…...
 
pytest之fixture
Pytest 中 Fixture 的 yield 用法 在软件测试中,设置和清理测试环境是一个重要的环节。Pytest 作为一个功能强大的测试框架,通过 Fixture 机制简化了这一过程。特别是yield语句的使用,使得 Fixture 能够在测试前进行设置,并在测试…...
 
Rancher
文章目录 Rancher1. 安装和配置2. 服务部署和管理3. 容器自动化缩容和扩容 Rancher Rancher 是一个开源的企业级容器管理平台,旨在简化容器化应用的部署、管理和运维。它支持多种容器编排引擎,如 Kubernetes、Docker Swarm 等,并提供了统一的…...
 
Wordpress建站问题记录
从一月到七月因为工作的情况没有进行太深入的开发,想着整理一下把做一个独立站把博客多个渠道发布一下,遇到几个问题在这里记录一下. 先写一下我的配置 系统: centos7 php: 7.4 wordpress: 6.6.1 mysql:8.0.6 1. HTTP 500 Internal 这个问题出现在我将wordpress的文件夹全部…...
JavaFx中通过线程池运行或者停止多个周期性任务
在JavaFX中,要实现点击按钮启动多个周期性任务并通过多线程执行,并在任务结束后将结果写入多个文本组件中,同时提供另一个按钮来停止这些任务,你可以使用ScheduledExecutorService来管理周期性任务,并使用AtomicBoolea…...
使用RabbitMQ实现异步支付状态通知
在支付系统中,如何确保支付状态的准确传递和处理显得尤为重要。今天,我们将以一个支付流程为例,探讨在引入RabbitMQ前后的实现和优化。 改造前 在引入RabbitMQ之前,我们通常会直接在支付方法中完成所有的操作。这包括查询支付单…...
[最短路dijkstra],启动!!!
总时间复杂度为 O ( ( n m ) log  m ) P4779 【模板】单源最短路径(标准版) #include<bits/stdc.h> #define ll long long #define fi first #define se second #define pb push_back #define PII pair<int,int > #define I…...
 
Java企业微信服务商代开发获取AccessToken示例
这里主要针对的是企业微信服务商代开发模式 文档地址 可以看到里面大致有三种token,一个是服务商的token,一个是企业授权token,还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret ,这个可…...
 
How does age change how you learn?(2)年龄如何影响学习能力?(二)
Do different people experience decline differently? 不同人经历的认知衰退会有不同吗? Do all people experience cognitive decline uniformly?Or do some people’s minds slip while others stay sharp much longer? 所有人经历的认知衰退都是一样的吗?还是有些人…...
可验证随机函数 vrf 概述
一、什么是VRF 背景: 在传统的区块链中,常用的随机算法是基于伪随机数生成器(Pseudorandom Number Generator,PRNG)的。PRNG是一种确定性算法,它根据一个初始种子生成一个看似随机的序列。在区块链中,通常使用的是伪随机数序列来选择区块的创建者、确定验证节点的轮换…...
 
鸿蒙双向绑定组件:TextArea、TextInput、Search、Checkbox,文本输入组件,图案解锁组件PatternLock
对象暂不支持双向绑定, 效果: 代码: Entry Component struct MvvmCase {StateisSelect: boolean falseStatesearchText: String ""StateinputText: string ""StateareaText: string ""build() {Grid() {G…...
JS 算法 - 计数器
theme: smartblue 题目描述 给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n , n 1 , n 2 ,等等)。 示例 1: 输入: n 10 ["cal…...
 
JavaScript基础——JavaScript运算符
赋值运算符 算术运算符 一元运算符 三元/三目运算符 比较运算符 逻辑运算符 运算符优先级 在JavaScript中,常见的运算符可以包括赋值运算符、一元运算符、算术运算符(二元运算符)、三元/三目运算符、比较运算符、逻辑运算符等࿰…...
E23.【C语言】练习:不创建第三个变量实现两个整数的交换
目录 题目条件 思路1( -) 思路2 (^)(XOR) 往期推荐 1.题目条件 禁止使用以上代码 2.思路1: -运算 aab; ba-b; aa-b; 但这样有潜在的问题 :a,b存储的数字过大,ab可能超过范围 因此改用思路2…...
如何搭建一个web系统?
需求 搭建一个web系统。 框架 设计:墨刀 前端:Vue.js 后端:Java 算法:Python 数据库:时序数据库,介绍 部署:Jekins https://www.jenkins.io/ 文档管理:Teambition 项目管理:禅道 代码管理:Gitlab 开发流程 设计文档和原型文档,功能接口设计࿰…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
 
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
 
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
 
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
 
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
 
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
 
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
