首页 > 其他分享 >通用搜索架构(转)

通用搜索架构(转)

时间:2024-01-10 11:15:33浏览次数:29  
标签:架构 精排 关键词 商品 搜索 召回 通用 Elasticsearch

转自:https://ost.51cto.com/posts/11557

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区

回顾自己过去的5年,从一名后端开发工程师,自我摸索、学习、探究,成为一名搜索开发工程师。复盘总结自己经历过的搜索的三个阶段,可简要概括为:(1)关键词搜索、(2)相关性搜索、(3)探索式搜索。

具体如下图:

 5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区
 • 关键词搜索:主要借助关系型数据库如Mysql 实现,搜索效率低下、性能差、效果差强人意。
 • 相关性搜索:借助 Solr 和 Elasticsearch 实现,基于规则文本分词实现千人一面,对词典和现有知识依赖较高。
 • 探索性搜索:借助elasticsearch、Flink、milvus、Word2vec、TensorFlow实现,大数据和深度学习框架整合,符合用户兴趣习惯,真正实现了千人千面。达到了类似主流电商平台:京东、天猫、拼多多的效果。

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区
当前所在公司属于电商行业,其搜索大体流程上可以归纳为几个阶段 QU(query understanding)->召回->粗排->精排->重排,本文会对QU, 粗排,精排,重排过程简要概述,重点讲解 Elasticsearch 作为搜索引擎在电商搜索流程中的具体应用场景。

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区

2.1 QU(query understanding)

目的:关键词合理分词,理解关键词意图

 

用户搜索时,搜索系统通常会对搜索词先做分词处理,然后经过搜索引擎(ES)进行相似度计算,召回相关doc。但会出现以下badcase难以处理:

 

 • 错词:用户输入错误导致搜索无结果;
 • 同义词:如中英文、简拼等;
 • 口语化词。所以会引入NLP工程师通过算法做更进一步的Query理解,通常有词性识别,实体识别,意图识别,词权重等流程。

 

2.2 召回

目的:提升搜索效率、挖掘潜在相关商品。

 

召回模块需要尽可能多的召回商品,除结合文本相关性之外,通常还会结合用户行为偏好,热榜高质量商品,向量检索,等多种方式尽可能召回相关商品。

 

2.3 粗排
目的:粗选高质量,相关度高商品,降低精排模型压力。

 

召回模块的召回结果通常是成千上万的,而精排模型受制于模型复杂度,资源,性能等要求,往往仅能支持数百商品同时预测,所以需要对召回候选集加以处理。

汇总商品质量分、意图分、实体分、文本分,然后通过打分公式,计算汇总每个商品的分数,最终对召回结果取 topN,从而达到从召回结果选取相关度高,质量高,符合关键词意图和实体识别结果,成交效率高的 TopN商品,最终输入精排模型。

 

2.4 精排


目的:结合用户行为,商品特征进行二次排序。

 

排序引擎会结合用户的静态特征,实时行为特征和商品特征,输入排序模型,预测用户的点击、加购、成交概率,然后通过精排公式进行二次算分,最终得出商品的精排分数。

 

2.5 重排
目的:结合产品及关键词特点,最终处理。

 

经过粗排,精排后的商品有时候会存在商品类目或标签集中分布,头部商品过度曝光等特点,为保证展示结果的多样性,公平性,往往需要对列表结果进行重排,通常的打散重排方法有分桶法,滑动窗口法,多权重打散等方法。

 

3、Elasticsearch在搜索过程中的应用

                                                                                                                                                                                 


Elasticsearch 在我司电商搜索中主要应用在以下场景:

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区


结合 QU 结果,扩展多路召回,丰富召回结果集。

 

 • 文本召回
搜索词与搜索字段域相关性计算(ES multi_fields)。

 

 • 意图召回

搜索词类目,品牌,人群,性别,属性召回。

 

 • 实体召回
品牌,类目,标签等召回。

 

 • 向量召回
基于向量相似度召回相关商品。

 

 • 用户行为召回
聚合用户的类目,品牌,地域等信息,召回一批高度相似的商品。

 

3.2 补充相关性得分

多路召回中的热榜商品召回,离线模型等召回路结果通常是离线计算所得,无法实时匹配关键词及筛选条件,需要经过 Elasticsearch 补充相关性得分,语句如下:

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区

3.3 商品打散抽样
通过使用 collapse 对搜索结果进行去重取样,可以达到商品去重的目的。

 

但需注意此时搜索结果的total 是取样之前的 total,如需准确获取 total,可以使用聚合的方式进行操作,具体语句如下:

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区

5年+ Elasticsearch 电商实战经验深度复盘-鸿蒙开发者社区
做搜索工程师久了之后,会觉得 Elasticsearch 在搜索场景中的贡献有限,尤其是当搜索对NLP及排序算法越发依赖之后,越发有这样的想法。但回想起来,Elasticsearch 的应用场景又不仅限于搜索场景,包括但又不仅限于数据数据统计分析,多媒体数据向量检索去重等。

 

在面对搜索系统不断进化的过程中,常常有这样的感叹:技术日新月异,新技术永远学不完,算法模型参与的场景越来越多,技术复杂度越来越高,这又何尝不是互联网行业的特点呢?但是我们技术人永远都在面对变化不是么?借用一句富含阿里味的话:永远不变的是变化。

 

但我应该如何去面对呢?我想我已经想好了自己的面对方法:深挖底层,方能立于不败之地,深入了解数据结构,这样当了解一门新的技术时才能灵活掌握快速上手,做到触类旁通。做到极致,把自己的事情做到极致,或许会用不一样的收获。坚持努力,在自己热爱的领域持续投入,因为我坚信日拱一卒,功不唐捐。

标签:架构,精排,关键词,商品,搜索,召回,通用,Elasticsearch
From: https://www.cnblogs.com/libin2015/p/17956076

相关文章

  • 互联网项目架构演变过程(单体架构-模块化架构-微服务架构)
    1.单体架构1.传统的架构分为三层架构:web控制层,业务控制层,数据库访问层2.业务没有拆分,所有的代码写在一个项目工程中3. 一旦有一个模块导致服务不可用,可能会影响整个项目 2.模块化架构模块化项目就是把传统架构的项目进行业务拆分成多个app,最终打包成一个项目进行部署......
  • 统一搜索管理系统的一些思考
    产品背景市场分析目前搜索类产品多集中在阿里云、腾讯云等大型云厂商手中,主要提供公有云服务的能力,而提供私有化部署,产品功能齐全,支持跨系统查询的智能搜索服务产品市场上较少。嘉诚统一搜索管理系统支持多数据源接入,支持跨系统统一搜索,支持私有化部署,能很好解决以上问题。用户......
  • 自动补全、搜索建议
    作为系统的使用者,我希望用户输入搜索的过程中,系统能进行自动补全和搜索建议,协助用户输入更精准的关键词,提高后续全文搜索阶段文档匹配的准确度。实现方案用户刚开始输入的过程中,使用CompletionSuggester进行关键词前缀匹配,刚开始匹配项会比较多,随着用户输入字符增多,匹配项越来......
  • 高可用架构,去中心化有多重要?
    ★微服务系列18篇1背景在互联网高可用架构设计中,应该避免将所有的控制权都集中到一个中心服务,即便这个中心服务是多副本模式。对某个中心服务(组件)的过渡强依赖,那等同于把命脉掌握在依赖方手里,依赖方的任何问题都可能成为你不稳定的因素。而弱化强依赖,实现可降级交互,是一种设......
  • 微服务架构下的高可用方案
     一、双机热备双机热备是指两台机器都在运行,但并不是两台机器都同时提供服务。当提供服务的一台机器出现故障的时候,另外一台机器会马上自动接管并且提供服务,并且切换的时间非常短。 一、数据库架构和一致性在项目中当业务规模越来越大,数据越来越多,随之而来的就是数据......
  • 系统存储架构升级分享
    一、业务背景系统业务功能:系统内部进行数据处理及整合,对外部系统提供结果数据的初始化(写)及查询数据结果服务。系统网络架构:    •部署架构对切量上线的影响-内部管理系统上线对其他系统的读业务无影响•分布式缓存可进行单独扩容,与存储及查询功能升级无关......
  • EasyCVR分组管理新增搜索功能的开发实现
    EasyCVR既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC等视频流。很多用户在EasyCVR平台中集成了大量的视频,虽然有分组,但体量太大查询起来还是较为麻烦。为了方便用户查找,EasyCVR平......
  • 百度搜索exgraph图执行引擎设计与实践
    作者|搜索Go研发组导读百度搜索exgraph图执行引擎设计重点分成三个部分:图描述语言、图执行引擎、对接扩展。图描述语言是一种基于文本可读的图描述语言,用于描述任务中的算子以及算子之间的依赖关系,即让人可以理解,也可以被计算机理解并执行。图执行引擎是exgraph的核心,负责根据图......
  • 微服务架构服务间调用如何规范
    目前微服务架构应用非常普遍,我们在获得其带来的优势的同时,需要思考是否解决了其带来的问题。在以往学习SpringBoot的过程中,就遇到关于Service循环依赖的问题。微服务架构中服务间相互依赖的问题仍然十分普遍,针对这个问题,我咨询过公司的架构师,他们的回答是无法解决/避免。显然上述......
  • ARM64和X64架构之间的区别
    ARM64和X64架构之间的区别ARM64(也称为Aarch64)是一种64位的处理器架构,源自英国ARM公司设计的RISC(精简指令集计算机)架构。这种架构以其低功耗、高性能以及广泛应用于移动设备如智能手机和平板电脑而知名。近年来,由于其性能提升和能效优势,ARM64也开始在服务器和某些个人电脑平台上得到......