蚂蚁金服 ZSearch 在向量检索上的探索

elasticsearch-7.10.2+opendistro鉴权配置 elasticsearch-7.10.2 opendistro 鉴权配置 阅读详情

图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享

引言

ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析、搜索、多维过滤等场景。蚂蚁金服从2017年开始向内部业务方提供 ElasticSearch 服务,我们在蚂蚁金服的金融级场景下,总结了不少经验,此次主要给大家分享我们在向量检索上的探索。

ElasticSearch 的痛点

ElasticSearch 广泛应用于蚂蚁金服内部的日志分析、多维分析、搜索等场景。当我们的 ElasticSearch 集群越来越多,用户场景越来越丰富,我们会面临越来越多的痛点:

  • 如何管理集群;

  • 如何方便用户接入和管理用户;

  • 如何支持用户不同的个性化需求;

  • ...

为了解决这些痛点,我们开发了 ZSearch 通用搜索平台:

  • 基于 K8s 底座,快速创建 ZSearch 组件,快捷运维,故障机自动替换;

  • 跨机房复制,重要业务方高保;

  • 插件平台,用户自定义插件热加载;

  • SmartSearch 简化用户搜索,开箱即用;

  • Router 配合 ES 内部多租户插件,提高资源利用率;

向量检索需求

基于 ElasticSearch 的通用搜索平台 ZSearch 日趋完善,用户越来越多,场景更加丰富。

随着业务的飞速发展,对于搜索的需求也会增加,比如:搜索图片、语音、相似向量。

为了解决这个需求,我们是加入一个向量检索引擎还是扩展 ElasticSearch 的能力使其支持向量检索呢?

我们选择了后者,因为这样我们可以更方便的利用 ElasticSearch 良好的插件规范、丰富的查询函数、分布式可扩展的能力。

接下来,我来给大家介绍向量检索的基本概念和我们在这上面的实践。

向量检索基本概念

向量从表现形式上就是一个一维数组。我们需要解决的问题是使用下面的公式度量距离寻找最相似的 K 个向量。

  • 欧式距离:

    • 两点间的真实距离,值越小,说明距离越近;

  • 余弦距离:

    • 就是两个向量围成夹角的 cosine 值,cosine 值越大,越相似;

  • 汉明距离:

    • 一般作用于二值化向量,二值化的意思是向量的每一列只有0或者1两种取值;

    • 汉明距离的值就两个向量每列数值的异或和,值越小说明越相似,一般用于图片识别;

  • 杰卡德相似系数:

    • 把向量作为一个集合,所以它可以不仅仅是数字代表,也可以是其他编码,比如词,该值越大说明越相似,一般用于相似语句识别;

因为向量检索场景的向量都是维度很高的,比如256,512位等,计算量很大,所以接下来介绍相应的算法去实现 topN 的相似度召回。

向量检索算法

KNN 算法

KNN 算法表示的是准确的召回 topK 的向量,这里主要有两种算法,一种是 KDTtree,一种是 Brute Force。我们首先分析了 KDTree 的算法,发现 KDTree 并不适合高维向量召回,于是我们实现的 ES 的 Brute Force 插件,并使用了一些 Java 技巧进行加速运算。

KDTree 算法

简单来讲,就是把数据按照平面分割,并构造二叉树代表这种分割,在检索的时候,可以通过剪枝减少搜索次数。

构建树

以二维平面点(x,y)的集合(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)为例:

图片来源:https://blog.youkuaiyun.com/richard9006/article/details/90058465

  • 按照 x 排序,确定中间值7,其他坐标分两边;

  • 第二层按照 y 排序,第三层按照 x 排序;

  • 并且在构建时维护每个节点中的 x 最大最小,y 最大最小四个值;

查找最近点

图片来源:https://blog.youkuaiyun.com/richard9006/article/details/90058465

搜索(3,5)的最近邻:

  • 到根节点距离为5;

  • 遍历到右节点(9,6),发现整棵右子树的x轴,最小值是8,所以所有右子树的节点到查询节点的距离一定都大于8-3=5,于是所有右子树的节点都不需要遍历;

  • 同理,在左子树,跟(5,4)节点比较,(7,2)被排除;

  • 遍历完(2,3),(4,7),最近点(5,4) 返回;

结论

Lucene 中实现了 BKDTree,可以理解为分块的 KDTree,并且从源码中可以看到 MAX_DIMS = 8,因为 KDTree 的查询复杂度为 O(kn^((k-1)/k)),k 表示维度,n 表示数据量。说明 k 越大,复杂度越接近于线性,所以它并不适合高维向量召回。

Brute Force

顾名思义,就是暴力比对每一条向量的距离,我们使用 BinaryDocValues 实现了 ES 上的 BF 插件。更进一步,我们要加速计算,所以使用了 JAVA Vector API 。JAVA Vector API 是在 openJDK project Panama 项目中的,它使用了 SIMD 指令优化。

结论

使用 avx2 指令优化,100w 的 256 维向量,单分片比对,RT 在 260ms,是常规 BF 的 1/6。ElasticSearch 官方在7.3版本也发布了向量检索功能,底层也是基于 Lucene 的 BinaryDocValues,并且它还集成入了 painless 语法中,使用起来更加灵活。

ANN 算法

可以看到 KNN 的算法会随着数据的增长,时间复杂度也是线性增长。例如在推荐场景中,需要更快的响应时间,允许损失一些召回率。

ANN 的意思就是近似 K 邻近,不一定会召回全部的最近点。ANN 的算法较多,有开源的 ES ANN 插件实现的包括以下这些:

  • 基于 Hash 的 LSH;

  • 基于编码的 IVFPQ;

  • 基于图的 HNSW;

ZSearch 依据自己的业务场景也开发了 ANN 插件(适配达摩院 proxima 向量检索引擎的 HNSW 算法)。

LSH 算法

Local Sensitive Hashing 局部敏感 hash,我们可以把向量通过平面分割做 hash。例如下面图例,0表示点在平面的左侧,1表示点在平面的右侧,然后对向量进行多次 hash,可以看到 hash 值相同的点都比较靠近,所以在 hash 以后,我们只需要计算 hash 值类似的向量,就能较准确的召回 topK。

IVF-PQ 算法

PQ 是一种编码,例如图中的128维向量,先把向量分成4份,对每一份数据做 kmeans 聚类,每份聚类出256个聚类中心,这样,原始向量就可以使用聚类中心的编号重新编码,可以看出,现在表示一个向量,只需要用4个字节就行。然后当然要记录下聚类中心的向量,它被称之为码本。

图片来源:https://yongyuan.name/blog/vector-ann-search.html

PQ 编码压缩后,要取得好的效果,查询量还是很大,所以前面可以加一层粗过滤,如图,把向量先用 kmeans 聚类成1024个类中心,构成倒排索引,并且计算出每个原始向量与其中心的残差后,对这个残差数据集进行 PQ 量化。用 PQ 处理残差,而不是原始数据的原因是残差的方差能量比原始数据的方差能量要小。

这样在查询的时候,我们先找出查询出靠近查询向量的几个中心点,然后再在这些中心点中去计算 PQ 量化后的 top 向量,最后把过滤出来的向量再做一次精确计算,返回 topN 结果。

图片来源:https://yongyuan.name/blog/vector-ann-search.html

HNSW 算法

讲 HNSW 算法之前,我们先来讲 NSW 算法,如下图,它是一个顺序构建图流程:

  • 例如第5次构造 D 点的流程;

  • 构建的时候,我们约定每次加入节点只连3条边,防止图变大,在实际使用中,要通过自身的数据估计该参数;

  • 随机一个节点,比如 A,保存下与 A 的距离,然后沿着 A 的边遍历,E 点最近,连边。然后再重新寻找,不能与之前重复,直到添加完3条边;

查找流程包含在了插入流程中,一样的方式,只是不需要构建边,直接返回结果。

HNSW 算法是 NSW 算法的分层优化,借鉴了 skiplist 算法的思想,提升查询性能,开始先从稀疏的图上查找,逐渐深入到底层的图。

以上这3类算法都有 ElasticSearch 的插件实现(具体源码见最底下附件):


LSH 插件

IVSPQ 插件

HNSW 插件

概述

在创建 index 时传入抽样数据,计算出 hash 函数。写入时增加 hash 函数字段。召回用 minimum_should_match 控制计算量

在创建索引时传入聚类点和码本,写入数据就增加聚类点和编码字段,召回先召回编码后距离近的再精确计算召回

扩展 Lucene 的 DocValues,在每次生成 segment 前,获取 DocValue 里的原始值,并调用开源 HNSW 库生成索引

优点

1.实现简单,性能较高

2.无需借助其他 lib 库

3.无需考虑内存

1.性能较高

2.召回率高 >90%

3.无需考虑内存

1.查询性能最高

2.召回率最高 >95%

缺点

1.召回率较其他两种算法较差,大概在85%左右

2.召回率受初始抽样数据影响

3.ES 的 metadata很大

1.需要提前使用 faiss 等工具预训练

2. ES 的 metadata很大

1.在构建的时候,segment 合并操作会消耗巨大的 CPU

2.多 segment 下查询性能会变差

3.全内存

ZSearch HNSW 插件

我们根据自己的场景(轻量化输出场景),选择了在 ES 上实现 HNSW 插件。因为我们用户都是新增数据,更关心 top10 的向量,所以我们使用了通过 seqNo 去 join 向量检索引擎方式,减少 CPU 的消耗和多余 DocValues 的开销。

对接 porxima 向量检索框架:

  • proxima 是阿里内部达摩院开发的一个通用向量检索引擎框架,类似与 facebook 开源的 faiss;

  • 支持多种向量检索算法;

  • 统一的方法和架构,方便使用方适配;

  • 支持异构计算,GPU;

实现 ProximaEngine

写入流程,扩展 ElasticSearch 本身的 InternalEngine,在写完 Lucene 以后,先写 Proxima 框架,Proxima 框架的数据通过 mmap 方式会直接刷到磁盘,一次请求的最后,Translog 刷入磁盘。就是一次完整的写入请求了。至于内存中的 segment,ElasticSearch 会异步到达某个条件是刷入磁盘。

Query 流程

查询的时候,通过 VectorQueryPlugin,先从 Proxima 向量检索引擎中查找 topN 的向量,获得 seqNo 和相似度,再通过构造 newSetQuery 的 FunctionScoreQuery,去 join 其他查询语句。

这里的数字型 newSetQuery 底层是通过 BKDTree 去一次遍历所得,性能还是很高效的。

Failover 流程

当然我们还要处理各种的 Failover 场景:

  • 数据从远端复制过来时:

    • 我们拦截了 ElasticSearch 的 recovery action;

    • 然后生成 Proxima 索引的快照,这个时候需要通过写锁防止数据写入,快照生成由于都是内存的,其实非常快;

    • 把 Proxima 快照复制到目的端;

    • 再进行其他 ElasticSearch 自己的恢复流程;

  • 数据从本地 translog 恢复时,我们会记录快照的 LocalCheckPoint,如果当前 CheckPoint 小于等于 LocalCheckPoint,可以直接跳过,否则我们会回查 Proxima 检索引擎,防止数据重试;

  • 目前还有一个情况,数据会有重复,就是主副分片全部挂掉时,translog 还未刷盘,数据可能已经写入 Proxima 了。

对比

sift-128-euclidean 100w 数据集:

(https://github.com/erikbern/ann-benchmarks)


HNSW 插件

ZSearch-HNSW 插件

数据写入

(单线程1000个 bulk 写入)

1.初始写入 5min,25个 segment,最大 CPU 300%

2.合并成1个 segment 5min,最大 CPU 700%(本地最大)

构建索引 15min,因为单线程,所以最大 CPU 100%

查询

1.Top 10,召回率98%

2.rt 20ms , 合并成1个 segment 后,5ms

1.Top 10,召回率98%

2.rt 6ms

优点

兼容 failover

CPU 消耗少,无额外存储

缺点

CPU 消耗大,查询性能跟 segment 有关

主副分片全挂的情况下会有少量数据重复

总结

ES 参数配置最佳实践

  • 100w 256维向量占用空间,大概是0.95GB,比较大:

    • 所以更大的堆外内存分配给 pagecache;

    • 例如 8C32G 的机器,JVM 设置 8GB,其他 24GB 留给系统和 pagecache;

  • 设置 maxconcurrentshard_requests:

    • 6.x 默认为节点数*5,如果单节点 CPU 多,可以设置更大的 shards,并且调大该参数;

  • BF 算法使用支持 AVX2 的 CPU,基本上阿里云的 ECS 都支持;

算法总结

  • KNN 适合场景:

    • 数据量小(单分片100w以下);

    • 先过滤其他条件,只剩少量数据,再向量召回的场景;

      召回率100%;

  • ANN 场景:

    • 数据量大(千万级以上);

    • 先向量过滤再其他过滤;

    • 召回率不需要100%;

    • LSH 算法:召回率性能要求不高,少量增删;

    • IVFPQ 算法:召回率性能要求高,数据量大(千万级),少量增删,需要提前构建;

    • HNSW 算法:召回率性能要求搞,数据量适中(千万以下),索引全存内存,内存够用;

未来规划

深度学习里的算法模型都会转化成高维向量,在召回的时候就需要用相似度公式来召回 topN,所以向量检索的场景会越来越丰富。

我们会继续探索在 ElasticSearch 上的向量召回功能,增加更多的向量检索算法适配不同的业务场景,将模型转化成向量的流程下沉到 ZSearch 插件平台,减少网络消耗。希望可以和大家共同交流,共同进步。

作者介绍

吕梁(花名:十倍),2017年加入蚂蚁金服数据中间件,通用搜索平台 ZSearch 基础架构负责人,负责 ZSearch 组件在 K8s 上的落地及基于 ES 的高性能查询插件开发,对 ES 性能调优有着丰富的经验。

附件

  • fast-cosine 插件:

    https://github.com/StaySense/fast-cosine-similarity

  • LSH 插件 :

    https://github.com/alexklibisz/elastik-nearest-neighbors

  • IVFPQ 插件:

    https://github.com/rixwew/elasticsearch-approximate-nearest-neighbor

  • HNSW 插件:

    https://github.com/opendistro-for-elasticsearch/k-NN

  • 向量算法概述:

    https://yongyuan.name/blog/vector-ann-search.html

  • HNSW 算法:

    https://blog.youkuaiyun.com/u011233351/article/details/85116719

  • ANN 性能测试框架 :

    https://github.com/erikbern/ann-benchmarks

本文归档在 sofastack.tech。

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“T恤”,试试手气~

* 本期互动奖品“SOFAStack 定制T恤”

Mac用户必看:Parallels Desktop 18.1.1最新破解版安装与优化全攻略(附资源) 本文为Mac用户提供Parallels Desktop 18.1.1的详细安装与优化指南,涵盖虚拟化技术选型、专业级配置流程及性能调优技巧。重点解析Parallels Desktop在图形加速、系统资源调度方面的核心优势,并分享生产力增强技巧与典型应用场景实战方案,帮助用户最大化利用这一高效虚拟化工具。 阅读详情

相关推荐

SAP ALV表格F4搜索帮助不触发DATA_CHANGE?3步排查搞定

本文针对SAP ALV表格中F4搜索帮助选择值后,DATA_CHANGE事件不触发的经典问题,提供了三步系统性排查方法。核心在于理解F4值回写机制,并需在事件处理中手动填充修改表以通知ALV控件数据变更,从而确保后续校验、自动计算等依赖DATA_CHANGE的逻辑能正常执行。

c2d3e4f的博客 1133

ZSearch

ZSearch是蚂蚁集团基于Elasticsearch开发的增强版搜索服务,在保持与原生Elasticsearch兼容的基础上,重点优化了集群管理和高可用能力,并新增了zsearchsql、smartsearch等功能特性。与MySQL类比,ZSearch中的索引(index)相当于数据库中的表,文档(document)对应行记录,字段(field)对应列,并支持通过REST API和DSL语法进行数据操作。ZSearch提供了完整的查询功能,如通过GetAPI实现精确查询、SearchAPI实现复杂检索等

m0_70042640的博客 624

用 Coze 打造纯自动化 AI 情报助手

本文将引导您逐步构建一个简易的AI情报助手,从提示词到工作流,再到卡片消息,详细讲解了如何利用Coze平台开发自动化工具。过程简单易懂,何不亲自动手一试?如果您对此类内容感兴趣,敬请关注本作者。未来,我将带来更多精彩的AI工具教程,助您迅速掌握各类AI应用。在这个AI时代,让您领先一步。t=O83A2AGI.NET AI 教程 震撼!用 Coze 打造纯自动化 AI 情报助手震撼!

xinzhaobuxuan的博客 2531

推荐一个Go开发,搜索文件名和目录名以及文件内容的小工具

下载 下载地址: https://github.com/zztroot/zsearch/releases 源码地址: https://github.com/zztroot/zsearch 列子 搜索文件名和文件内容 $ zsearch -d error [f] zsearch/error.go [c] .idea/workspace.xml -> 2 [c] zsearch/search.go -> 3 StartTime:2022-05-11 10:30:13 | EndTime:2022-

zzt(仲天)的博客 707

BK3437蓝牙5.2芯片实战:手把手教你设计超低功耗智能家居遥控器(附原理图)

本文详细介绍了BK3437蓝牙5.2芯片在超低功耗智能家居遥控器设计中的应用。通过分析芯片的核心优势、硬件设计要点和低功耗固件策略,手把手教你实现日均功耗低于5μA的遥控器原型,并附有原理图设计详解和常见问题解决方案。

tgb34567890的博客 619

扩增子测序|iCAMP包——基于系统发育零模型分析确定性和随机性在群落构建过程R中实践

iCAMP的核心功能是通过系统发育分箱的零模型分析,量化不同生态过程的相对重要性。,用于评估不同生态过程(同质选择、异质选择、扩散和漂变)对整个群落及各个系统发育分箱(bin)的相对重要性。该方法也成为nature,science系列文章的常客,深受大家喜欢,在文章中运用该方法将为论文增色不少。外环和内环的圆环图显示了每个门(或变形菌门的分类)中不同过程的相对重要性。中央是系统发育树,内环展示了不同过程的相对重要性,表示每个系统发育箱中的DL。示例代码中提供了数据和代码,已经小编测试,可直接运行。

weixin_46814750的博客 6230

向量数据库——AI时代的基座

向量数据库在构建基于大语言模型的行业智能应用中扮演着重要角色。大模型虽然能回答一般性问题,但在垂直领域服务中,其知识深度、准确度和时效性有限。为了解决这一问题,企业可以利用向量数据库结合大模型和自有知识资产,构建垂直领域的智能服务。向量数据库存储和处理向量数据,提供高效的相似度搜索和检索功能。通过向量嵌入,将企业知识库文档和数据转化为向量表示,并与大模型进行交互,实现专有、私域的垂直的行业智能化应用。向量数据库中的向量指的是用于表示数据特征的数学概念。在计算机科学和数据处理领域

陈老老老板的博客 1万+

《详细指南:本地部署Ollama大型模型的完整步骤》

通过本指南,您应该能够成功地在本地部署Ollama大型模型,并开始使用它进行各种AI任务。Ollama的易用性和高性能使其成为研究和开发的理想选择。Ollama是一个高性能的AI模型部署平台,支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama,并运行一个大型模型。

eclipsercp的博客 3696

向量数据库:使用Elasticsearch实现向量数据存储与搜索

Elasticsearch在7.x的版本中支持向量检索。在向量函数的计算过程中,会对所有匹配的文档进行线性扫描。因此,查询预计时间会随着匹配文档的数量线性增长。出于这个原因,建议使用查询参数来限制匹配文档的数量(类似二次查找的逻辑,先使用检索到相关文档,然后使用向量函数计算文档相关度)。访问的推荐方法是通过cosinessimilarity, dotProduct, 1norm或l2norm函数。但是需要注意,每个DSL脚本只能调用这些函数一次。

马超的博客 1万+

MATLAB2021b详细安装教程

1.下载 2.安装 下载安装包后打开iso文件,若是无法打开请用解压软件打开。 ①打开MATLAB_R2021b_win64,双击软件开始安装 ② 一直点击下一步,直到步骤③ ③选择我已有我的许可证的文件密钥,并输入62551-02011-26857-57509-64399-54230-13279-37181-62117-65158-40352-64197-45508-24369-45954-39446-39538-16936-10698-58393-44718-32560-10501-40

惜洛-Jankin的博客 9万+

Linux V3H 平台开发系列讲解(摄像头)2.3.1 MAX96912 MAX96717 GMSL1 CSI 2lane配置

​ 单路摄像头,数据流类型YUV422, mipi接口,经过MAX96717 串行器,gmsl1链路 到解串器MAX96712,最后mipi csi 2lane(lane0 lane1)输出到 renesa v3h soc开发板; ​

xian18809311584的博客 580

揭秘ZSearch2.0—基于OpenResty的API网关设计

背景 OpenResty 是一个支持lua的nginx,并且内置了一些常用的lua库。利用lua,我们就可以便捷得扩展nginx能力,甚至可以直接作为Web服务对外提供。 主页链接 由下图可以看出,我们可以在各个阶段进行干预。 设计 本文介绍的API网关设计很简单,主要有路由,过滤器,拦截器三个部分组成。 可以实现权限验证,日志记录,参数改...

weixin_33738578的博客 735

【2026年得物春招算法岗- 4月18日 -第二题- 老张爬山】(题目+思路+Java&C++&Python解析+在线测试)

这篇文章介绍了一个动态规划问题,解决老张在n天内安排爬山计划以最大化愉悦值的问题。题目允许最多k次打破"不能连续两天爬山"的规则限制。 摘要要点: 使用三维动态规划数组dp[i][j][s],表示第i天结束时已用j次机会、当天状态为s(0不爬/1爬)时的最大愉悦值 状态转移考虑两种情况:当天不爬山时取前一天两种状态的最大值;当天爬山时分别处理前一天不爬山和爬山(需消耗机会)的情况 最终结果为考虑所有可能用掉的k次机会后,最后一天两种状态的最大值 提供了Python、Java和C++三种实

m0_73659489的博客 1357

向量遍历_蚂蚁金服 ZSearch 在向量检索上的探索

图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享引言ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索,多维过滤等场景。蚂蚁金服从2017年开始向内部业务方提供 ElasticSearch 服务,我们在蚂蚁金服的金融级场景下,总结了不少经验,此次主要给大家分享我们在向量检索上的探索。ElasticSearc...

weixin_42515093的博客 268

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

距离向量算法_蚂蚁金服 ZSearch 在向量检索上的探索

图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享引言ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析、搜索、多维过滤等场景。蚂蚁金服从2017年开始向内部业务方提供 ElasticSearch 服务,我们在蚂蚁金服的金融级场景下,总结了不少经验,此次主要给大家分享我们在向量检索上的探索。Elastic...

weixin_39955142的博客 292

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

路由器距离向量算法计算举例_蚂蚁金服 ZSearch 在向量检索上的探索

图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享引言ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索,多维过滤等场景。蚂蚁金服从2017年开始向内部业务方提供 ElasticSearch 服务,我们在蚂蚁金服的金融级场景下,总结了不少经验,此次主要给大家分享我们在向量检索上的探索。ElasticSearc...

weixin_39751769的博客 275

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

为什么蚂蚁金服的 ZSearch 比 ElasticSearh 还牛?

点击“开发者技术前线”,选择“星标????”在看|星标|留言, 真爱作者介绍吕梁(花名:十倍),2017年加入蚂蚁金服数据中间件,通用搜索平台 ZSearch 基础架构负责人,负责 Z...

开发者技术前线-DevolperFront 2881

为什么蚂蚁金服的 ZSearch 比 ElasticSearh 还牛逼?

点击“开发者技术前线”,选择“星标????”13:21 在看|星标|留言, 真爱作者介绍吕梁(花名:十倍),2017年加入蚂蚁金服数据中间件,通用搜索平台 ZSearch 基础架构负责...

开发者技术前线-DevolperFront 1196

Elasticsearch8.x KNN search 使用方式及参数介绍

Elasticsearch使用HNSW算法来支持高效的kNN搜索。与大多数kNN算法一样,HNSW是一种近似方法,它牺牲了结果准确性以提高搜索速度。ES8.x升级的KNN(相似度算法)功能需要dense_vector字段类型支持,而不是传统的text和keyword类型。使用场景有如下两点在script_score查询中,对匹配过滤器的文档进行评分在KNN搜索API中,查找与查询向量最相似的k个向量类型不支持聚合或排序。字段类型的值必须为浮点型的数组。.........

qq_17170133的博客 5485

【亲测免费】 OpenDistro for Elasticsearch k-NN 教程

OpenDistro for Elasticsearch k-NN 教程 项目介绍 OpenDistro for Elasticsearch k-NN 是一个基于 Elasticsearch 的开源插件,旨在提供高效的 k-近邻(k-Nearest Neighbors, k-NN)搜索功能。该插件利用了 Elasticsearch 的分布式特性,使得在大规模数据集上进行近似最近邻搜索成为可能。k-...

gitblog_00853的博客 1119

Search是一个瑞士的搜索引擎,它不仅提供传统的网页搜索服务,还扩展了其功能以包括天气、地图、电影等多种实用工具

总结来说,搜索引擎的核心功能包括从互联网上获取信息、建立索引、提供用户接口以及实现搜索结果的排序和呈现。这些功能的实现依赖于复杂的后台技术,如网络爬虫、索引排序算法、大数据处理等。随着技术的不断进步,搜索引擎正变得越来越智能,能够为用户提供更快速、更准确、更个性化的信息服务。Search是一个瑞士的搜索引擎,它不仅提供传统的网页搜索服务,还扩展了其功能以包括天气、地图、电影等多种实用工具。从技术层面来看,搜索引擎的功能可以分为多个核心模块,每个模块承担着不同的任务,共同构成了搜索引擎强大的信息处理能力。

[Blog][Domain] programb.blog.youkuaiyun.com 1562

09蚂蚁-分布式缓存架构——10.Springboot+Redis+Ehcache实现二级缓存

Springboot+Redis+Ehcache实现二级缓存 一定要看懂第二张图,你在查询的时候,一定要记得将值在返回到缓存中去,二级缓存查到,就返回到一级缓存中,数据库查到就缓存到二级缓存再一级缓存 背景 逻辑图 代码部分 1.配置 application.yml spring: #s数据库配置 datasource: url: jdbc:mysql://localhost:...

qq_28461661的博客 587

Open Distro for Elasticsearch k-NN 项目教程

Open Distro for Elasticsearch k-NN 项目教程 1. 项目的目录结构及介绍 Open Distro for Elasticsearch k-NN 项目的目录结构如下: k-NN/ ├── build.gradle ├── gradle │ └── ... ├── gradlew ├── gradlew.bat ├── LICENSE ├── NOTICE ├──...

gitblog_01082的博客 506

tair实现分布式锁

基于tair的分布式锁,在阿里内部技术社区已经有很多讨论了,不过基本上都是基于悲观锁的实现,基本特征是互斥或者阻塞。但实际的业务场景中,并不是所有的地方都需要悲观锁,写冲突很少的场景(例如:员工、门店信息修改),使用乐观锁更为合适。 那么如何设计和使用乐观锁呢?在看具体的代码前需要先对乐观锁的原理有个简单的了解。 乐观锁 乐观锁特点 version,版本控制,是乐观锁的根基。乐观锁并不是...

chengbinbbs的专栏 1735

Redis 雪崩,击穿以及常见解决方案

缓存雪崩 缓存雪崩产生的原因 缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统的崩溃。 缓存失效的时候如下图: 缓存失效时的雪崩效应对底层系统的冲击非常可怕!那有什么办法来解决这个问题呢?基...

MrLee的博客 2090
上一篇: 蚂蚁金服 Service Mesh 大规模落地系列 - Operator 篇
下一篇: SOFA Weekly | MOSN配置文档、SOFABolt等组件发布、社区活动预告
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值