热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从业务需求到能力扩展|阿里云Elasticsearch向量检索能力的创变史

从,业务,需求,到,能力,扩展,阿,里,云,elasticsearch,向量,检索,

本文字数:1874
阅读时间:约3~5分钟

您将获得
1、阿里云 Elasticsearch 向量检索能力的演变过程
2、如何使用向量检索
3、未来阿里云 Elasticsearch 的探索之路

以下是正文


创意的诞生

阿里云 Elasticsearch 是目前公有云营收增长最快的大数据产品之一。随着客户数的增长,我们发现随着 AI 技术的不断普及,针对向量检索场景的需求量在逐步提升。比如人脸识别、音/视频识别、商品智能推荐等场景,技术上都离不开向量检索的能力作为支撑。以某专有云客户为例,客户的场景是视频安全监控,摄像头每天会产生500万帧采样图片,每个月产生TB级的向量数据,业务上需要实时对这些视频采样数据进行图片比对搜索。该客户属于典型的时序+向量检索的场景,而时序分析场景刚好是 Elasticsearch 最擅长的部分,那么我们能否在Elasticsearch现有能力的基础上补充向量检索的支持能力呢?基于这个朴素的想法,我们开始了与阿里巴巴达摩院向量检索团队的合作,希望借助达摩院自研的向量检索引擎补充阿里云 Elasticsearch 在向量检索方面的能力,一站式解决云上用户全文检索、时序分析及向量检索的需求。

简单介绍一下阿里云 Elasticsearch 使用的 Proxima 向量引擎库:阿里巴巴达摩院提供的 Proxima 向量检索引擎是一个运用于大数据下,实现向量近邻搜索的高性能软件库,能够提供业内性能和效果领先的基础方法模块,支持图像搜索、视频指纹、人脸识别、语音识别和商品推荐等各种场景。同时,引擎对向量检索的一些基础能力,如聚类、距离计算、高并发、Cache 等做了深层次的优化。

目前 Proxima 向量检索库在阿里集团覆盖的生产业务如图所示:

image.png

优选在线方案

如何将 Proxima 引擎库集成到阿里云 Elasticsearch 生态中,有两个方向摆在我们眼前:一种是最直观也是最简单的离线方案,也是集团内其它兄弟团队大部分采用的方案,依赖独立的离线资源做索引全量 Build;另一种是在线方案,也是无缝对接 Elasticsearch 现有能力、易用性最好的方案,但写入性能和存储相对会有一些Overhead。两种方案优劣势对比如下:

image.png

考虑到云上客户大多数对弹性和稳定性要求比较高,我们最终选择了易用性、稳定性更好的在线方案。

详解设计方案

在确定在线方案的前提下,如何能满足 Proxima 向量索引和 Elasticsearch 原生索引无缝集成呢?答案是利用 Lucene的 Codec 扩展机制。Codec 可以理解为 Lucene 索引文件格式的一种协议,用户只要实现对应的写入/读取的业务流程,即可自定义正排、倒排、StoreFields 等不同索引的具体实现。在阿里云 Elasticsearch 的实现中,我们包装并扩展了Lucene 的 Latest Codec,当向量数据写入es的某个字段时,前期流程跟原生的流程一致,先放入 indexBuffer 中;等内部发起 Refresh 时,调用底层的 Proxima 库,消费向量数据构建出 Proxima 的向量索引。

查询的时候,由于向量索引和原生索引一样都是 Segment 粒度生成,所以我们只要很轻量的实现向量 Segment 对应的 Weight 和 Scorer即可。具体的,当查询到了 BuildScorer 阶段,我们利用底层 Proxima 库加载当前 Segment的向量索引文件,通过 Native 方法查询出TopN的 id 和 Score 后,通过docID和分数生成当前 Segment 的 Scorer,交给indexSearcher继续执行上层的求交/求并操作即可。

image.png

基于 Codec 机制,向量索引已经可以被 Lucene 当成普通索引来管理,这对上层的 Elasticsearch 来说是完全透明的,所以可以实现不修改上层业务的前提下,兼容 Elasticsearch 所有上层的分布式文件操作;所有扩副本、本地 Failover 、阿里云快照备份/恢复等功能都与原生普通索引无异。因此大大提高了索引的稳定性,降低了用户的使用成本。

性能与效果测评

以下是阿里云Elasticsearch 6.7.0版本环境实测数据,机器配置为数据节点16c64g*2 + 100G ssd云盘,数据集为Sift128维 Float 向量(http://corpus-texmex.irisa.fr/)
数据总量为2千万。索引配置全部是默认参数。

image.png

使用说明

5.1 创建索引

PUT test { "settings": { "index.codec": "proxima", "index.vector.algorithm": "hnsw" # 可选值: hnsw/linear }, "mappings": { "_doc": { "properties": { "feature": { "type": "proxima_vector", # 向量字段 "dim": 2 # 向量维度,支持1~2048维 }, "id": { "type": "keyword" } } } } }

5.2 添加文档

POST test/_doc { "feature": [1.0, 2.0], # float数组,数组长度必须与mapping指定的dim保持一致 "id": 1 }

5.3 检索

GET test/_search { "query": { "hnsw": { # 与创建索引时指定的algorithm一致 "feature": { "vector": [1.5, 2.5], # float数组,数组长度必须与mapping指定的dim保持一致 "size": 10 # 指定召回的topN } } } }

6.总结展望

阿里云 Elasticsearch 始终致力于为云上用户提供一站式的高性能、低成本的大数据检索分析服务。向量检索引擎是我们在人工智能领域迈出的第一步,后续的发力点还有很多,比如支持更丰富的近似算法、支持离线训练、硬件加速等,有很多有意思的方向等待我们一起探索。目前阿里云ES向量检索引擎即将在下一版本上线公有云,有需求接入的用户可以提前提工单给我们沟通使用场景,感谢大家的支持。

关于向量检索更具体的产品介绍,请点击访问【向量检索插件使用最佳实践】

加入我们

9.png


推荐阅读
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • 配置PicGo与Gitee结合Typora打造高效写作环境
    本文详细介绍了如何通过PicGo和Gitee搭建个人图床,并结合Typora实现高效的文章撰写。包括创建图床项目、生成访问令牌、安装配置PicGo和Typora等步骤。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • 惠普战86 Pro G2:新一代商用台式机的性能与设计解析
    惠普战86 Pro G2台式机以其卓越的性能和紧凑的设计,满足了现代商务环境的需求。本文将详细介绍这款商用台式机的各项特点,包括其强大的硬件配置、精美的外观设计以及出色的稳定性和安全性。 ... [详细]
  • ZOJ 2760 - 最大流问题
    题目链接:How Many Shortest Paths。题目描述:给定一个包含n个节点的有向图,通过一个n*n的矩阵来表示。矩阵中的a[i][j]值为-1表示从节点i到节点j无直接路径;否则,该值表示从i到j的路径长度。输入起点vs和终点vt,计算从vs到vt的所有不共享任何边的最短路径数量。如果起点和终点相同,则输出无穷大。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 如何为PDF文档添加水印?简单步骤实现
    为了增强PDF文档的安全性和版权保护,添加水印是一个有效的方法。本文将介绍如何通过专业软件或在线工具轻松为PDF文档添加水印,确保您的文档在共享时仍能保持其独特性和安全性。 ... [详细]
author-avatar
丁扣其
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有