使用 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 多平台发布

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值