返回

有赞搜索系统的架构演进

见解分享

有赞搜索平台是公司内部各项搜索应用及部分 NoSQL 存储应用的 PaaS 产品,以合理有效支持检索和多维过滤功能。目前,它已支持大大小小数百个检索业务,服务于近百亿数据。在为传统搜索应用提供高级检索和大数据交互能力的同时,有赞搜索平台还需要为其搜索相关性 功能提供强大的技术支撑。

搜索相关性 顾名思义,就是针对给定搜索条件,准确判断文档与搜索条件相关性的能力。对于搜索引擎来说,这项能力至关重要,直接影响着最终呈现给用户的搜索结果质量。

随着有赞业务的飞速发展,搜索相关性面临着越来越大的挑战,需要满足以下需求:

  • 亿级冷热数据混合存储与高效查询。 随着业务发展,搜索系统中存储的数据量日益庞大,既有热数据(如近一周内用户经常访问的商品),又有冷数据(如数年前发布的文章)。
  • 动态灵活的搜索排序。 不同业务对搜索结果排序的优先级不同,比如针对有赞微商城,搜索结果需要按照销量和评价来排序,而对于有赞连锁零售,则需要按照门店距离来排序。
  • 复杂的查询条件。 搜索条件越来越复杂,如:我要买一件红色的 T 恤,它的尺码是 L 码,同时包含关键词“有赞”和“生态”。
  • 实时性保障。 有赞有很多搜索相关的实时业务场景,比如搜索实时热词、实时相关搜索等。

针对以上挑战,有赞搜索系统在架构上进行了全面升级,实现了由关系型数据库到分布式搜索引擎的演进。目前,有赞搜索系统的架构如下图所示:

[图片]

新架构主要由以下几个组件组成:

1. 数据接入层

负责从各种数据源采集数据,支持 MySQL、PostgreSQL、MongoDB 等多种数据源。数据采集任务通过离线和实时两种方式进行,实时数据采集任务使用 Kafka 作为消息队列。

2. 索引构建层

负责将采集到的数据构建成倒排索引,倒排索引是一种快速检索文档中特定词条位置的数据结构。有赞搜索系统基于开源的 Elasticsearch 构建索引服务,支持分布式扩展,并通过分片机制提升索引性能。

3. 搜索服务层

负责接受来自前端应用的搜索请求,并根据请求条件,从索引中检索文档,然后按照相关性排序,最后返回给前端应用。有赞搜索系统使用开源的 Solr 作为搜索服务,支持分布式扩展,并通过副本机制保证服务的可用性。

4. 相关性计算层

负责计算文档与搜索条件的相关性,是搜索系统最重要的组件。有赞搜索系统实现了多种相关性算法,包括 BM25、LATCH 和 DSSM 等。

5. 机器学习算法层

负责训练和部署机器学习模型,用于优化搜索相关性。有赞搜索系统采用了多种机器学习算法,包括逻辑回归、决策树和神经网络等。

6. 搜索治理层

负责搜索系统的运营和维护,包括监控、告警、限流等功能。有赞搜索系统基于 Prometheus、Grafana 和 Jaeger 等开源组件构建了完善的监控和告警体系,并通过限流机制保证系统的稳定性。

在新架构的支撑下,有赞搜索系统实现了以下几个方面的提升:

  • 存储容量从亿级提升至百亿级。 通过分布式存储架构,搜索系统支持存储和检索百亿级数据。
  • 检索性能从秒级提升至毫秒级。 通过分布式检索架构,搜索系统支持毫秒级文档检索。
  • 相关性准确度提升 20% 以上。 通过机器学习算法优化,搜索系统相关性准确度大幅提升。

有赞搜索系统架构的演进是一个不断探索和创新的过程,未来我们将继续探索新的技术,优化现有架构,为有赞的业务发展提供更加强大的技术支撑。