时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

Instacart 将搜索基础设施迁移至 PostgreSQL,并逐步淘汰 Elasticsearch

作者:Leela Kumili

  • 2025-08-28
    北京
  • 本文字数:1179 字

    阅读完需:约 4 分钟

大小:576.75K时长:03:16
Instacart将搜索基础设施迁移至PostgreSQL,并逐步淘汰Elasticsearch

Instacart重新设计了其搜索基础设施,用 PostgreSQL 替换了 Elasticsearch,将基于关键词的检索和基于嵌入的检索整合到了一个系统中。通过将目录和搜索数据整合到 Postgres 中,该公司旨在简化操作,减少数据同步开销,并提高搜索结果的精确度和召回率。

 

重新设计的一个关键部分是改进检索结果的方式。传统的关键词搜索擅长匹配确切的产品属性,例如,像“pesto pasta sauce 8oz”这样的查询就受益于精确的词汇匹配。但是,更宽泛的意图驱动查询,如“健康食品”,通过语义检索来处理会更好,因为后者理解术语和概念之间的关系。通过在 Postgres 中结合这两种方法,Instacart 可以在精确度(只返回相关结果)和召回率(尽可能多地捕获相关项)之间取得平衡,确保客户既能看到他们正在寻找的确切产品,也能发现其他有意义的选项。

 

根据 Instacart 工程团队的说法,迁移提高了开发速度,消除了在系统之间协调数据的需要。混合基础设施还提供了更大的灵活性,方便处理动态库存和复杂的用户偏好,使平台每天能够处理数百万的搜索请求。价格、库存和折扣信息都可以实时更新,为顾客提供了更高效、更个性化的购物体验。

 

正如 Instacart 工程师Ankit Mittal所说:

 

与之前在 Elasticsearch 中使用的非规范化数据模型相比,规范化数据模型使我们的写入工作负载减少了 10 倍。这带来了将近 80%的存储和索引成本节省,减少了死胡同搜索,并改善了整体客户体验。

 

以前,Elasticsearch 处理全文查询,而事务性数据存储在 Postgres 中。维护两个独立的数据库会面临同步数据的挑战和更高的运营成本。为了增加语义搜索能力,团队最初实施了FAISS,然后过渡到使用 Postgres pgvector扩展的混合模型。这种方法允许基于词汇和基于嵌入的检索在同一个系统中运行,减少了数据重复和复杂性。


之前使用 FAISS 和 Postgres 的检索架构(来源:Instacart工程博客

 

经过重新设计的架构使用分片的 Postgres 实例和规范化的数据模型来实现水平扩展。每个分片都包含目录和搜索索引,查询通过服务层路由到适当的分片。根据 Instacart 工程师的说法,他们利用 Postgres GIN索引和经过修改的ts_rank函数实现了高性能的文本匹配,而关系模型允许 ML 功能和模型系数存储在单独的表中。与 Elasticsearch 相比,规范化使写入工作负载减少了十倍,降低了存储和索引成本。与此同时,它还支持数百千兆字节的 ML 特征数据,可实现更高级的检索模型。


使用 pgvector 和 Postgres 的混合检索架构(来源:Instacart工程博客

 

Postgres 扩展是重新设计的核心。例如,将pg_trgm用于基于三元组的文本搜索,将pgvector用于基于嵌入的搜索,从而使数据库既能处理传统的关键词搜索,又能处理语义搜索。查询通过路由层传递到包含必要索引的分片,因为无需跨系统同步,所以能高效地返回结果。

 

声明:本文为 InfoQ 翻译,未经许可禁止转载。

 

原文链接:

https://www.infoq.com/news/2025/08/instacart-elasticsearch-postgres/

2025-08-28 15:007763

评论 1 条评论

发布
用户头像
他之所以选择这个方案,并不是es不够专业,而是因为他这个场景, 他不想维护2套系统,增加架构的复杂性,而是借助pg的升级来满足自己的需求,减少了架构层面的成本
2025-08-28 16:24 · 上海
回复
没有更多了

产品经理团队的管理秘法

马踏飞机747

管理 产品经理 团队

华为20级工程师吐血整理出600页Spring微服务架构设计,绝了!

996小迁

Java spring 编程 架构 微服务

【原创】Spring Boot一口气说自动装配与案例

田维常

spring Boot Starter

【原创】Spring Boot 过滤器、监听器、拦截器的使用

田维常

spring Boot Starter

【原创】SpringBoot 这几种配置文件方式,你都用过吗?

田维常

spring Boot Starter

只需三步,带你从0到1玩转React,附源码我一定给你讲明白

小Q

Java 学习 编程 架构 面试

国家超算深圳中心计划2年内提升计算能力至少1000倍;图神经网络的生成式预训练论文解读

京东科技开发者

云计算

如何快速构建Spring Boot基础项目?

田维常

spring Boot Starter

浅析一个较完整的SpringBoot项目

田维常

spring Boot Starter

想不通(关于人生的突发奇想)

干啥啥不行的赢

区块链数字货币商城系统开发技术

薇電13242772558

区块链 数字货币

MySQL-技术专题-STRAIGHT_JOIN

码界西柚

【原创】Spring Boot 集成Spring Data JPA的玩法

田维常

spring Boot Starter

【原创】SpringBoot快速整合Thymeleaf模板引擎

田维常

spring Boot Starter

为什么11·11物流一年比一年快?奥秘就在这里!

华为云开发者联盟

物联网 物流 仓储

详解软件行业低代码开发平台以及敏捷开发方案

Marilyn

敏捷开发

用时半个月,终于把2020年各大公司的Java面试题精选整理成文档了

Java架构之路

Java 架构 面试 编程语言

阿里P8架构师呕心沥血整理的【Docker实战】文档带你玩转Docker。

Java架构之路

Java 程序员 架构 面试 编程语言

WebSocket连接错误Error during WebSocket handshake Unexpected response code 404

码界西柚

华为云“创原会”:40+技术精英论道云原生2.0

华为云开发者联盟

k8s 华为云

【原创】Spring Boot 如何手写stater

田维常

spring Boot Starter

MySQL-技术专题-创建临时表

码界西柚

阿里P8Java大神给迷茫的程序员一些中肯建议:“请不要再虚度光阴了!”

Java架构之路

Java 阿里巴巴 程序员 架构 编程语言

Spring Boot 集成 Druid 监控数据源

田维常

spring Boot Starter

【原创】Spring Boot终极篇《下》

田维常

spring Boot Starter

2020双十一终极清单!阿里云CDN&视频云最全优惠攻略

阿里云Edge Plus

CDN

【原创】Spring Boot集成Redis的玩法

田维常

spring Boot Starter

Spring Boot 如何快速实现定时任务

田维常

spring Boot Starter

华为云FusionInsight湖仓一体解决方案的前世今生

华为云开发者联盟

数据库 华为 仓库

【原创】Spring Boot集成Mybatis的玩法

田维常

spring Boot Starter

【原创】Spring Boot终极篇《上》

田维常

spring Boot Starter

Instacart将搜索基础设施迁移至PostgreSQL,并逐步淘汰Elasticsearch_数据库_InfoQ精选文章