闲鱼技术2022年度白皮书-服务端主题-电商搜索里都有啥?详解闲鱼搜索系统(上)

简介: 电商搜索里都有啥?详解闲鱼搜索系统


 

作者:云钟

 

搜索是电商平台的核心流量入口,承载着平台主要的成交引导、意图收敛、活动投放。一个稳定、高效、可扩展的搜索系统是电商平台得以生存发展的基石。本文探讨如何构建完善的商品搜索系统,并根据闲鱼二手交易的差异化特性介绍闲鱼搜索系统的时效性优化。

 

一、 首先,构建一个搜索系统:电商场景的搜索

 

1. 搜索引擎

 

搜索系统的核心是搜索引擎,目前Lucene、ElasticSearch等开源引擎已十分成熟,阿里云也提供完整的搜索解决方案-OpenSearch,包含基于Ha3的搜索引擎(Heaven ask 3)及系列管控工具。这里,我们简单描述下搜索引擎内的基本概念作为导引,不过多深入引擎的具体实现(那将是一个冗长的话题,网络上的资料也随处可见)。

 

1) 搜索引擎的基本概念

 

• 分词

 

通过一定规则对文本分出单词,每个单词作为搜索的最小粒度单元。只有单词匹配,文档才能被召回,因此分词的准确是搜索精准的基础。如“红色摩托车”被分词成“红色”,“摩托车”,那它将被“摩托车”或者“红色”召回,如果分词成“红色摩托”,“车”,那它在引擎中被搜索出的概率就将大打折扣。

 

• 索引

 

。 _红色苹果手机,doc1_

。 _红色苹果,doc2_

。 “红色”,“苹果”->doc1,doc2

。 _“手机”->doc1_

 

。 倒排索引:称为反向索引、置入档案或反向档案,是一种索引方法。被用来存储在全文搜索下某单词在文档存储位置的映射。它是文档检索系统中最常用的数据结构。

 

。 正排索引:也叫attribute索引或者profile索引,是存储doc某特定字段(正排字段)对应值的索引,用来进行过滤、统计、排序或者算分使用。正排索引中“正"指的是从doc-> fieldInfo的过程。

 

。 索引内容类型:文本索引、空间索引、向量索引、数值索引。

 

• 排序方法

 

匹配召回的结果集,通过特定的排序规则呈现。这里的排序规则,可以是单一维度的排序(如按价格、销量、发布时间);人工设置的权重分;相关性得分;特定场景的模型打分等。

 

基于这三个基本概念,搜索动作就可以简化地理解为“利用搜索词的分词结果,通过倒排索引匹配相应的文档,并依据特定排序方法有序透出”的过程。

 

搜索引擎仅提供搜索的基础能力,现实环境下的搜索场景当然要复杂的多,一款地图搜索和一款商品搜索所面临的挑战大相径庭。作为原材料的搜索引擎,该打造成何种形状,就看面对问题如何去设计模具了。

 

以闲鱼为例,搜索系统的整体架构如下:

 

image.png

闲鱼搜索系统架构图

 

2. 在线服务

 

上述架构图中的步骤1~8为一次搜索请求的完整执行流程。

 

1) 请求接入模块->应用层

 

处理客户端或h5请求,请求接入模块的主要工作:参数校验、负载均衡、安全拦截。大部分的非法请求在这一层被拦截,避免进入系统核心模块后,导致不可预期的结果。应用层承载面向用户的业务逻辑:实际处理用户的业务请求,进行安全合规检测,同时并行请求投放的各类资源位。

 

 

 

2) 应用层->排序接入层

 

排序接入层是连接应用层与底层引擎的纽带,也是闲鱼搜索系统的最核心模块。他负责解析应用层的搜索请求,并对其进行合适流程编排:意图预测->请求拼串->搜索引擎召回->精排模型打分->重排规则->外部混排。

 

3) 排序接入层->意图预测模块

 

负责分词并预测搜索请求的实际意图,包括错词改写(例:平果->苹果)、同义词的合并(例:pingguo->苹果),类目预测(例:“苹果”出手机,还是出水果,它们各自的权重又是多少?)。

 

4) 排序接入层->搜索引擎

 

利用意图预测得到的信息,合并应用层参数,拼装出合法的搜索引擎请求,在搜索引擎内部历经“海选”、“粗排”、“精排”三个阶段,得到符合召回条件的商品集。

 

5) 排序接入层->精排模型打分

 

由于RT的限制,搜索引擎内部无法完成对海量商品复杂度较高的打分计算。这一步的工作,将引擎召回的商品集送入更精准的打分系统进行算分。为什么不把打分服务放在引擎内部?技术上是可行的,但由于打分服务变更频率频繁,而引擎相对稳定,处于系统迭代稳定性的考虑,独立拆分精排打分服务是更好的选择。

 

6) 排序接入层->混排模块

 

部分业务场景下,合作方有合并混排的诉求。独立拆分混排服务,隔离开发环境,让不熟悉主搜的外部开发同学在独立混排模块内做开发,即使服务异常,也不至于影响闲鱼本身的搜索能力。

 

7) 排序接入层->应用层

 

排序完成的商品列表,在应用层补充实时信息,如各类标签,促销信息等。同时,将商品搜索结果与广告等各类投放组装层最终的搜索结果页。

 

8) 应用层->接入层->客户端

 

将最终的搜索结果页返回到客户端或h5页面进行渲染。

 

3. 离线模块

 

与在线服务对应,搜索系统的离线模块负责数据的dump,清洗,索引构建。

 

1) 搜索引擎离线模块

 

image.png


• 全量索引(Fullindex):数据源来自多表join后的全量业务数据,包含所有商品信息,由buildSerive构建好索引后提供给Ha3使用,系统内仅有一份全量索引。

 

• 批次增量索引(IncIndex):根据周期内(通常30分钟到1小时)数据产出方发送的增量消息(如:商品修改信息),在BuildService上构建成索引段,定期发送给Ha3加载,引擎存在多段批次增量。

 

• 实时索引(RtIndex):将数据产出方实时生产的数据经中转Topic发送至Ha3,由Ha3引擎内的BS lib构建出实时索引加载使用,时效性为实时。在新的批次增量索引加载后,Ha3对实时索引作清理。

 

接下篇:https://developer.aliyun.com/article/1225878?groupCode=idlefish

相关文章
|
9月前
|
JSON 安全 JavaScript
闲鱼商品列表API接口指南
本指南基于逆向分析,提供闲鱼商品列表数据获取的技术方案,适用于关键词、地区、价格等条件筛选。支持网页端GET与移动端POST请求,返回HTML或JSON格式数据,需注意登录态与参数编码,仅用于学习研究。
1186 2
|
9月前
|
JSON 监控 API
闲鱼商品详情API接口文档
本接口用于获取闲鱼商品详情,包括标题、价格、库存、卖家信息、图片链接、交易记录等核心数据,返回JSON格式,适用于商品监控、竞品分析等合规场景。需通过模拟请求或授权方式调用,注意反爬机制。
1631 1
|
12月前
|
JSON BI API
全网最全面介绍闲鱼API接口指南
闲鱼是阿里巴巴旗下的二手交易平台,提供RESTful API支持商品管理、订单处理、用户操作与数据统计。开发者可通过OAuth 2.0认证,使用App Key和access_token调用接口,实现自动化运营与第三方集成。本指南详解API核心功能、接入步骤、代码示例及最佳实践,助您高效开发。
11880 1
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2026年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
24382 161
|
11月前
|
存储 SQL 缓存
Delta Join:为超大规模流处理实现计算与历史数据解耦
Delta Join(FLIP-486)是Flink流式Join的范式革新,通过将历史数据存储与计算解耦,实现按需查询外部存储(如Fluss、Paimon),避免状态无限增长。它解决了传统Join在高基数场景下的状态爆炸问题,显著降低资源消耗:状态减少50TB,成本降10倍,Checkpoint从小时级缩短至秒级,恢复速度提升87%。兼容标准SQL,自动优化转换,适用于海量数据实时关联场景,推动流处理迈向高效、稳定、可扩展的新阶段。
1028 1
Delta Join:为超大规模流处理实现计算与历史数据解耦
|
设计模式 SQL 安全
并发设计模式实战系列(13):双重检查锁定(Double-Checked Locking)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十三章,废话不多说直接开始~
876 0
|
网络协议 算法 网络性能优化
|
运维 搜索推荐 调度
Ha3搜索引擎简介
Ha3是阿里巴巴搜索团队开发的搜索引擎平台,它为阿里集团包括淘宝、天猫在内的核心业务提供搜索服务支持。
27565 1
|
Kubernetes Cloud Native Java
云原生|kubernetes|ingress-nginx插件部署(kubernetes-1.23和最新版controller-1.6.4)
云原生|kubernetes|ingress-nginx插件部署(kubernetes-1.23和最新版controller-1.6.4)
2984 0