在当今数字化购物时代,用户对于电商平台上的搜索体验期望越来越高。Instacart作为领先的在线杂货配送服务提供商,面对数十亿商品和成千上万的零售商,如何让搜索快速且精准地匹配用户意图成为提升用户满意度和留存率的关键。为此,Instacart对其搜索基础设施进行了彻底的革新,将传统搜索与当代的语义搜索技术有机结合,并将整个检索体系建立在Postgres数据库之上,从而实现了一套高效、可扩展且灵活的混合搜索系统。本文将深入解析Instacart这一创新架构的演变历程、技术选型以及实际应用效果,为行业探索现代搜索架构提供宝贵经验。 在搜索领域,关键词检索一直占据着核心位置,但其固有的限制也日益明显。传统全文检索在处理简单的关键词匹配时表现良好,但面对用户的复杂意图和语义差异时往往力不从心。
语义搜索技术通过向量嵌入方式捕捉查询与文档之间的语义关联弥补了这一不足。例如用户精准输入"8盎司罗勒青酱意面酱"时,关键词检索能够快速精准定位,但对于诸如"健康食品"这样的模糊查询,则语义搜索更有优势。Instacart之前采用独立的搜索系统分别支持两种检索方式,然而这种分割带来了操作复杂、资源浪费及结果合并存在诸多瓶颈。 鉴于此,Instacart致力于打造统一的混合检索系统,目标是提升搜索相关性、优化性能并降低运维成本。面对用户动态变化的购物偏好和庞大的商品库,该系统需具备高吞吐量及低延迟,同时能够及时反映库存、价格和促销的实时更新。传统一些搜索方案如Elasticsearch在其去中心化的写入负载及数据模型演变中,难以满足这种规模和复杂度的需求。
迁移全文搜索到Postgres成为Instacart的重要战略转折。Postgres以其关系型数据库的特性支持高度规范化的数据模型,有效减少了大量冗余数据写入,大幅降低了写负载和存储成本。利用Postgres的GIN索引和定制化的排名函数,使得文本匹配既准确又高效。同时,ML模型特征可以分表存储,不同表的写入频率灵活,便于更复杂的机器学习检索模型实现。这种设计将计算能力进一步下沉到数据层,避免将大量计算任务放在应用层,显著缩短查询响应时间。 尽管Postgres在文本搜索性能上取得了突破,早期对语义搜索的支持依赖外部的Approximate Nearest Neighbor(ANN)引擎FAISS。
该服务需要与Postgres分别查询并在应用层合并结果,带来架构复杂和过度数据提取(overfetching)的问题。FAISS在实时筛选和过滤维度上的限制,导致检索出的结果往往包含大量无关项,引入了额外的计算和存储压力。 为解决上述痛点,Instacart将目光投向了Postgres中的pgvector扩展。pgvector为Postgres添加了向量检索能力,使得两种检索机制可以统一在单一数据库中完成,极大简化了系统架构。通过将商品的文本特征和嵌入向量存储于同一数据库,并结合实时库存及其他属性作为过滤条件,Instacart实现了预筛选提高检索效率,避免过度数据拉取。 为了验证pgvector在大规模环境下的表现,Instacart搭建了模拟生产环境的实验集群,模拟真实流量对系统进行压力测试。
测试结果证实pgvector满足了高并发的吞吐和延迟指标,且在某些情形下以较高的召回率超越了FAISS。同时,在指标调优上,Instacart基于不同零售商规模制定混合索引策略,并适当调整Postgres的并行工作参数及数据存储格式,进一步提升了检索性能。经过全面的线上A/B测试验证,采用pgvector的混合检索策略能够有效减少零结果搜索,降低用户搜索挫败感,促进平台收益增长。 此外,集中存储和检索也带来了灵活的属性过滤功能。商品品牌、类别和实时可用性等指标能够在查询发起时作为预过滤条件,在降低检索空间的同时保证高相关性。这样的细粒度控制是传统FAISS服务难以实现的,对于复杂用户偏好支持提供了有力保障,也为后续个性化排序和推荐奠定了基础。
总结来看,Instacart通过构建基于Postgres的现代混合搜索架构,成功融合了关键词搜索与语义检索优势,实现了性能优越且运营成本低的检索系统。这不仅优化了用户购物体验,提升了商品搜索的准确性和响应速度,也为电商行业打造高效搜索引擎提供了新思路。随着技术的不断进步和业务需求的演变,Instacart的搜索平台具备灵活扩展能力,能够持续集成新兴技术,满足未来电商生态中复杂多变的检索需求。多团队合作和持续优化的努力也展现了现代互联网企业应对海量异构数据挑战的卓越实践。未来,随着向量检索和机器学习技术的融合深化,类似Instacart的混合搜索系统将成为电商竞争力提升的重要基石。 。