主要观点:Instacart 用 PostgreSQL 替换 Elasticsearch 重新设计了搜索基础设施,将关键词和基于嵌入的检索结合在一个系统中,以简化操作、降低同步开销并提高搜索结果的精度和召回率。
关键信息:
- 重新设计的关键部分是改进结果检索方式,传统关键词搜索擅长匹配精确产品属性,语义检索更擅长处理更广泛的意图驱动查询,两者结合可平衡精度和召回率。
- 迁移提高了开发速度,减少了系统间数据协调的需求,混合基础设施在处理动态库存和复杂用户偏好方面更灵活,能处理每日数百万的搜索请求,实时更新价格等信息。
- 之前 Elasticsearch 处理全文查询,事务数据存于 PostgreSQL,维护两个数据库有同步挑战和高运营成本,后过渡到使用 pgvector 扩展的混合模型,减少数据冗余和复杂性。
- 重新设计的架构使用分片的 PostgreSQL 实例和规范化数据模型实现水平扩展,利用 Postgres GIN 索引和修改后的 ts_rank 函数实现高性能文本匹配,关系模型可将 ML 特征和模型系数存于不同表中,归一化使写工作负载减少十倍,降低存储和索引成本。
- Postgres 扩展如 pg_trgm 和 pgvector 使数据库能处理传统关键词和语义搜索,查询通过路由层到包含必要索引的分片,高效返回结果无需跨系统同步。
重要细节:文中详细介绍了不同阶段的架构变化,如之前的 FAISS 和 Postgres 架构及当前的 pgvector 和 Postgres 混合架构,包括各部分的功能和优势等,并通过图片展示了架构变化。还引用了 Instacart 工程师 Ankit Mittal 的话说明归一化数据模型的好处。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。