随着电商行业的迅猛发展,用户在海量商品中快速准确地找到所需产品成为提升平台竞争力的关键。Instacart作为领先的线上杂货购物平台,面对数十亿商品和多家零售商,搜索系统的效率和准确性直接影响用户体验和商业价值。为了应对海量数据、动态库存和复杂用户需求,Instacart通过搭建基于Postgres的现代搜索基础设施,成功实现了混合检索模型的统一管理和高效运行,推动了搜索引擎技术的创新和升级。传统的全文检索技术往往依赖关键词匹配,适用于特定而明确的查询,例如确认某种品牌和规格的商品。然而,这种方法对模糊、概念性或多义性的搜索需求支持不足,难以捕捉用户潜在的语义意图。为弥补这一不足,嵌入式向量检索技术应运而生,通过将文本和查询转换为多维向量,用距离度量捕捉语义相似度,使得系统能够理解"健康食品"这类广义查询背后的含义。
Instacart最初在搜索架构中使用了Elasticsearch实现全文搜索,由于数据模型去规范化,以及写入负载极高,导致系统扩展性和性能瓶颈频出。Elasticsearch不适合频繁的局部更新,特别是需要实时反映价格变更和库存状态的大规模电商目录,令索引维护极为复杂且耗时。为了突破性能瓶颈,Instacart决定将全文搜索迁移至Postgres。Postgres不仅具备强大且成熟的关系数据库能力,还支持GIN索引和自定义排名函数,使得全文匹配性能大幅提升。更重要的是,Postgres的规范化数据模型大幅降低了写入压力,节省了存储资源,同时方便将机器学习特征与商品数据表分离存储,实现了复杂模型的组合和迭代更新。此外,Postgres较Elasticsearch的容错和性能退化表现更加稳定,易于维护,这为大规模生产环境提供了坚实保障。
基于Postgres的搜索系统架构,将计算推向数据层,减少了应用层的网络调用和数据搬运,有效降低了搜索延迟和系统复杂度。商品的可用性、价格等实时属性也直接纳入数据库预过滤,实现了精准过滤与快速响应的有机结合,更好支持用户个性化搜索需求。随着语义检索技术成熟,Instacart引入了FAISS作为独立的近似最近邻(ANN)向量检索服务,通过深度学习生成的文本和商品嵌入向量,提高了对复杂查询的理解能力。然而,独立服务架构带来了运维困难,数据同步和结果融合增加了系统负担。为解决这一矛盾,团队着眼于统一存储与检索平台,通过Postgres的pgvector扩展将语义向量检索功能集成到数据库中。pgvector让Postgres支持高效的向量索引和搜索,避免了跨系统的数据负载和复杂度,同时能够灵活地结合全文与向量检索结果,实现更精准的混合召回机制。
Instacart通过升级Postgres参数和调整索引策略,针对零售商的不同规模和商品特性优化了搜索性能。离线测试和小范围线上A/B实验显示,pgvector的召回率优于FAISS,且系统响应更快,零结果率显著降低,带来了商业收入的稳步增长。新架构进一步支持基于属性的过滤,如品牌、类别和库存状态,提升了搜索效率和结果相关性。整个迁移过程依托跨团队合作,涵盖机器学习、后台基础设施、核心平台与数据团队,确保了技术方案的落地与稳定运行。总结来看,Instacart以Postgres作为统一搜索引擎,使得全文检索与语义搜索优势互补,不仅提高了搜索系统的扩展能力和运行效率,更为动态商品信息和复杂用户偏好提供了灵活的支持。此举大幅降低了技术维护成本,提升了用户的购物体验,彰显了关系数据库在现代大数据检索领域扩展应用的巨大潜力。
未来,Instacart计划进一步深化属性过滤和个性化检索算法,全面应对电商领域不断变化的用户需求和业务挑战。该案例对于希望构建高效、可扩展且智能化搜索平台的互联网企业,具有重要的借鉴价值和启发意义。 。