当前位置: 首页 > news >正文

使用 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}/app/dev_tools#/console来执行此操作。或者,您可以将这些命令作为 HTTP 请求发送到 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 向量搜索来增强搜索功能 许多应用程序都依赖于提供精确且相关的搜索结果的能力。尽管传统关系数据库的全文搜索功能在某些情况下已经足够&#xff0c;但这些数据库在从文本中提取语义含义或搜索结构化程度较低的数据方面可能会出现不足。在这篇博文中&…...

Less-2(闭合)

我们使用第一关的测试方法尝试一下,打咩 直接看源码&#xff0c;看到&#xff0c;尝试一下闭合 <?php ini_set("display_errors", 0); $str $_GET["keyword"]; echo "<h2 aligncenter>没有找到和".htmlspecialchars($str)."相…...

mysql介绍

MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛用于存储和管理数据。它支持多种操作系统&#xff0c;如Linux、Windows、MacOS等。MySQL的特点包括&#xff1a; 1.开源免费&#xff1a;MySQL是开源的&#xff0c;可以免费使用和分发。 2…...

【ROS学习】ROS中 use_sim_time 参数的含义与作用

文章目录 写在前面一、背景描述二、 use_sim_time 参数的含义与作用三、举例说明1. 不设置use_sim_time (也即 use_sim_time false)&#xff0c;播放数据集使用rosbag play **.bag 2. 不设置use_sim_time (也即 use_sim_time false)&#xff0c;播放数据集使用rosbag play **…...

python-查找元素3(赛氪OJ)

[题目描述] 有n个不同的数&#xff0c;从小到大排成一列。现在告诉你其中的一个数x&#xff0c;x不一定是原先数列中的数。你需要输出最后一个<x的数在此数组中的下标。输入&#xff1a; 输入共两行第一行为两个整数n、x。第二行为n个整数&#xff0c;代表a[i]。输出&#x…...

苹果 Safari 的隐私保护与广告追踪问题 :技术进展与挑战

隐私保护的进展与挑战 近年来&#xff0c;浏览器行业在隐私保护技术方面取得了显著进展&#xff0c;尤其是在广告追踪领域。谷歌的 Chrome 浏览器推广了隐私沙盒&#xff0c;通过将用户可能感兴趣的主题分类并推送给广告商。Mozilla Firefox 和 Meta Facebook 则推出了一种名为…...

pytest之fixture

Pytest 中 Fixture 的 yield 用法 在软件测试中&#xff0c;设置和清理测试环境是一个重要的环节。Pytest 作为一个功能强大的测试框架&#xff0c;通过 Fixture 机制简化了这一过程。特别是yield语句的使用&#xff0c;使得 Fixture 能够在测试前进行设置&#xff0c;并在测试…...

Rancher

文章目录 Rancher1. 安装和配置2. 服务部署和管理3. 容器自动化缩容和扩容 Rancher Rancher 是一个开源的企业级容器管理平台&#xff0c;旨在简化容器化应用的部署、管理和运维。它支持多种容器编排引擎&#xff0c;如 Kubernetes、Docker Swarm 等&#xff0c;并提供了统一的…...

Wordpress建站问题记录

从一月到七月因为工作的情况没有进行太深入的开发,想着整理一下把做一个独立站把博客多个渠道发布一下,遇到几个问题在这里记录一下. 先写一下我的配置 系统: centos7 php: 7.4 wordpress: 6.6.1 mysql:8.0.6 1. HTTP 500 Internal 这个问题出现在我将wordpress的文件夹全部…...

JavaFx中通过线程池运行或者停止多个周期性任务

在JavaFX中&#xff0c;要实现点击按钮启动多个周期性任务并通过多线程执行&#xff0c;并在任务结束后将结果写入多个文本组件中&#xff0c;同时提供另一个按钮来停止这些任务&#xff0c;你可以使用ScheduledExecutorService来管理周期性任务&#xff0c;并使用AtomicBoolea…...

使用RabbitMQ实现异步支付状态通知

在支付系统中&#xff0c;如何确保支付状态的准确传递和处理显得尤为重要。今天&#xff0c;我们将以一个支付流程为例&#xff0c;探讨在引入RabbitMQ前后的实现和优化。 改造前 在引入RabbitMQ之前&#xff0c;我们通常会直接在支付方法中完成所有的操作。这包括查询支付单…...

[最短路dijkstra],启动!!!

总时间复杂度为 O ( ( n m ) log ⁡ m &#xff09; P4779 【模板】单源最短路径&#xff08;标准版&#xff09; #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&#xff0c;一个是服务商的token&#xff0c;一个是企业授权token&#xff0c;还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret &#xff0c;这个可…...

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

对象暂不支持双向绑定&#xff0c; 效果&#xff1a; 代码&#xff1a; Entry Component struct MvvmCase {StateisSelect: boolean falseStatesearchText: String ""StateinputText: string ""StateareaText: string ""build() {Grid() {G…...

JS 算法 - 计数器

theme: smartblue 题目描述 给定一个整型参数 n&#xff0c;请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n&#xff0c;每次调用它时会返回前一个值加 1 的值 ( n , n 1 , n 2 &#xff0c;等等)。 示例 1&#xff1a; 输入&#xff1a; n 10 ["cal…...

JavaScript基础——JavaScript运算符

赋值运算符 算术运算符 一元运算符 三元/三目运算符 比较运算符 逻辑运算符 运算符优先级 在JavaScript中&#xff0c;常见的运算符可以包括赋值运算符、一元运算符、算术运算符&#xff08;二元运算符&#xff09;、三元/三目运算符、比较运算符、逻辑运算符等&#xff0…...

E23.【C语言】练习:不创建第三个变量实现两个整数的交换

目录 题目条件 思路1&#xff08; -&#xff09; 思路2 &#xff08;^&#xff09;(XOR) 往期推荐 1.题目条件 禁止使用以上代码 2.思路1&#xff1a; -运算 aab; ba-b; aa-b; 但这样有潜在的问题 :a&#xff0c;b存储的数字过大&#xff0c;ab可能超过范围 因此改用思路2…...

如何搭建一个web系统?

需求 搭建一个web系统。 框架 设计:墨刀 前端:Vue.js 后端:Java 算法:Python 数据库:时序数据库,介绍 部署:Jekins https://www.jenkins.io/ 文档管理:Teambition 项目管理:禅道 代码管理:Gitlab 开发流程 设计文档和原型文档&#xff0c;功能接口设计&#xff0…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...