首页 > 其他分享 >电商搜索的多路召回

电商搜索的多路召回

时间:2023-05-28 12:55:05浏览次数:55  
标签:语句 多路 查询 召回 query 电商 id es

当选用 elasticsearch 作为电商的商品搜索存储系统时,用户输入一个 query 时,这个 query 是如何从es 中查询出商品数据的?

首先,用户输入的 query 词会通过query 分析服务产出若干个从不同维度表达用户意图的tokens。比如输入“红富士苹果”,经 query 分析后会产出以下维度的tokens:
image

比如搜索“红富士苹果”,query分析产出的 tokens有:品牌词:红富士;本质词:苹果、水果;商品的四级类目id;商品的SEO词(正宗、清甜、现摘)

  1. 本质词
  2. 品牌词
  3. 商家名称
  4. query 所要召回的商品四级类目 id
  5. 商品的 seo词
    ...

这里不对 query 分析作详细讨论。总之 query 分析是作用是将用户输入的 query 词变成若干能表达用户搜索意图的“维度”,然后基于这些“维度” 去召回商品。正是 query 分析会产出不同“维度”的tokens,根据这些 tokens 查询 es 获取商品数据的过程,就称为多路召回,每一路召回,我们可以根据它的表征“维度”,构造不同的 es 查询语句。

比如:针对四级类目 id,则可以使用:bool-query-filter 查询;而针对:品牌词,可以使用 bool-query-must-term 查询,而针对本质词,可能会有多个层级:比如苹果、水果,则可以决定更相关的使用 must 查询、低相关的使用 should 查询。此外,如果某一路产出的 token有很多,而且不同的 token 之间权重不一样,也可以考虑采用 constant-score-query 来封装某些 token的查询。

  "query": {
    "bool": {
      "filter": [] // part 1: 过滤条件
      "must": [], // part 1: 召回商品必须满足的条件
      "should": [] // part 2: 加分,相关性条件
    }
  }

然而,对于召回来说,保证每次查询结果的稳定性对用户体验、线上 case 的排查都非常重要。但是由于es的分片机制,以及线上增量数据的不断写入,某些 es 查询语句并不具有幂等性。比如就描述了使用 rescore 查询时因es 分片参数不一致导致的查询结果不一致问题。而对于线上核心电商搜索系统而言,应当要尽力避免这种不一致,所以一般在生产系统中,构造出来的查询语句要尽量保证其得分的稳定性,比如使用 constant-score-query 来封装子查询。另外,一般在 es 中并不存储 text 类型的字段并进行打分查询,而是通过 query 分析,将 query 分解成能表达用户意图的 token,基于这些 token 做“过滤”查询。

之所以是这样设计,其实也是跟电商搜索是:“结构化”召回有关。思考这样一个问题:es 里面要存储哪些字段来支持商品的搜索呢?比如对于一个商品 sku而言:

  1. 商品名称的分词结果,使用不同的分词器产出的分词结果不一样,会在 es 中使用多个字段存储分别存储不同分词器的分词结果。
  2. 商家名称的分词结果
  3. 商品的价格
  4. 商品的销量
  5. 品牌名称(分词结果)
  6. 商品的一二三四级类目id
  7. 商品的本质词(模型特征)
  8. spu_id、poi_id 等一些正排字段...

这些字段,其实都是结构化了的字段。注意,我们并不是使用 text 类型存储商品名称,而是将商品名称分词之后,在 es 索引构建时,将它们存储到 es 中,这样做的目的是:term 查询比 text 查询性能要好;text 查询的排序结果受es打分影响(分片上 doc 数量的变化),可能会导致从 es 中查出来的排序结果不稳定;在召回之前,肯定是要有query 分析的,query 分析不仅仅是对用户输入的查询语句做分词,还有其它一些 处理,比如同义词、相似词,query 的类目分析等;因此到 es 查询这一步,主要是 term 或者 filter 查询,并没有需要分词的 text 查询。

正因为多路召回的存在,可能导致查询语句非常的复杂,如果将多路召回表示成一个 es 查询语句,很有可能在召回阶段导致的耗时较高,因此将每一路召回(或者相关的某几路)放到一个 es 查询语句中(SearchBuilder),然后以线程池隔离向 es 发起查询,所以一次用户查询,到 es 召回时会被“放大”成多次 es 查询,存在着“查询放大”效应。

多路召回面临的一个问题是:查询结果的合并。对于商品而言,会有主键 spu_id 唯一标识一个商品,因此可以将它作为多路召回结果的合并主键。接下来就是将合并结果送到 rank 服务做排序了。rank 排序这里不做详细介绍。

从工程上来说,多路召回需要考虑的一些因素有:

  1. 统一各路召回的查询语句,当有新的需求或者新的特征被挖掘出来,需要新增一路召回时,能够方便地新增一路召回,从而方便业务快速迭代。
  2. 如果在 rank 层排序时,依赖es 的分数,则需要谨慎考虑修改 es 查询语句对 spu_id 的打分的影响。一般地,es 的打分只是作为粗排的一个因子,粗排完之后,rank 的模型打分才是决定商品顺序的关键因素。
  3. 某一路查询结果失败,并不影响其它路的查询结果,可允许部分失败。
  4. 能够较好地分析查询结果 spu_id 是由哪一路查询语句召回的,甚至是由哪一个查询条件召回的,这样有利于 case 排查分析。参考:es matched_queries。
  5. 每一路召回的查询耗时监控、查询结果数量 tp999 监控,支持异步查询 es(可参考 es 提供的 ListenableActionFuture 类),查询语句的限流等。这需要在RestHighLevelClient的基础之上进一步封装 es 客户端,并且与公司内部的基础组件打通(限流组件、监控组件)
  6. ES 索引构建时,避免doc 在分片上分布不均匀,从而影响 es 查询语句的稳定性。比如 es 索引实时更新时,es分片的doc 数量可能会动态变化,或者说同一个 spu_id 会不会在不同的索引构建日期,分布在不同的分片上。这往往是在索引构建时,指定 doc哈希到固定的分片。具体的索引构建本文不详细介绍。

一般常用的 es query 有如下几种:

  1. query-bool-must
  2. query-bool-filter
  3. query-bool-should
  4. constant-score-query
  5. rescore query
    视待查的具体字段,以及 query 分析产出结果选择何种查询。

参考:

  1. https://mp.weixin.qq.com/s/Nisgorg_Qgr-AdVm3c99LQ
  2. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

标签:语句,多路,查询,召回,query,电商,id,es
From: https://www.cnblogs.com/hapjin/p/17436559.html

相关文章

  • 深入了解平均精度(mAP):通过精确率-召回率曲线评估目标检测性能
    平均精度(AveragePrecision,mAP)是一种常用的用于评估目标检测模型性能的指标。在目标检测任务中,模型需要识别图像中的不同目标,并返回它们的边界框(boundingbox)和类别。mAP用于综合考虑模型在不同类别上的准确度和召回率。基本知识IOU(IntersectionOverUnion)是一种基于Jaccard......
  • API接口对电商平台有怎样的帮助?如何获取API接口?
    ​ API(ApplicationProgrammingInterface)接口对电商平台有很多帮助,下面列举几点:1.提高效率API接口可以让电商平台的不同模块之间进行快速的数据交互,帮助平台实现更高效的业务处理。比如,在订单管理和支付等方面,API接口可以让卖家直接与快递公司和支付渠道进行对接,从而提......
  • Shopee|Lazada电商平台api接口,接入获取商品评论|根据关键词取商品列表API说明示例
     Shopee和Lazada是东南亚地区广受欢迎的电商平台。它们的模式非常类似,都是以C2C(消费者到消费者)、B2C(企业到消费者)和O2O(线上到线下)为主要销售模式。用户可以在平台上购买商品或者将自己的商品出售给其他用户。这些平台提供了较高的使用便利性,比如支持多种支付方式、商品搜索......
  • 电商erp系统选品,跨境ERP系统选品,api接口采集数据
    ​  电商ERP系统选品优势:1.自动化选品:电商ERP系统可以根据销售数据、客户反馈、市场趋势等因素,自动化地筛选出热销商品,快速进行选品;2.数据分析功能:电商ERP系统可以对历史销售数据进行分析,得出销售趋势、客户偏好等信息,有利于精细化选品;3.库存管理:电商ERP系统可以管理商......
  • 开发者们:618电商团战即将开启,“抢流量”想上分,必备这三个大招 | MobTech观察
    最卷的一届“618”大促即将来袭。5月23日晚间开始,各平台陆续对外启动预售。在消费领域加速复苏,全国各地迎来“拼经济”热潮的背景下,各平台纷纷对外喊话,将打造“史上投入最大”的一届“618”。电商平台们想借年中大促漂漂亮亮地打一场“翻身仗”,却发现这场仗并不好打。据万得(Wind)数......
  • 直播电商迈入新周期,快手如何抢跑?
    文|螳螂观察作者|图霖直播电商迈入第七个发展年头,来到了新周期的变革前夜。行业竞争逐年加剧,但截至2022年已迅速攀升至35000亿元的直播电商市场交易规模,仍诱惑着新玩家挤进这张拥堵的牌桌。美团方面,继今年1月底在美团App内测外卖直播频道后,4月18号,美团外卖举办了首场“神券节”......
  • 618网购盛宴即将开启,云联络中心+AI成为电商的“新基建”
    科技云报道原创。618大战未启,烽烟已经弥漫。作为全民网购盛宴,618如今已成为各大平台的“必争之日”。不仅天猫、京东、苏宁易购等老牌电商巨头积极备战,电商新秀拼多多也宣布,将加码百亿补贴开展促销。与此同时,抖音、快手等短视频直播也成为“带货”的新主力,今年的618势必将群雄......
  • 淘宝商品评论数据接口、淘宝商品评价接口、天猫商品评论接口、买家评论接口、电商行业
    业务场景:作为全球最大的B2C电子商务平台之一,淘宝天猫平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入淘宝平台,淘宝平台提供了丰富的API接口,其中商品详情评论接口是非常重要的一部分。大家有探讨稳定采集淘宝整站实时商品详情评论数据接口,通过该接口开......
  • Java调用采集拼多多根据ID获取商品详情API接口返回值说明示例,获取电商平台商品详情数
    ​     拼多多是一家基于C2B拼团营销方式主营团购的电商平台,其盈利模式由利润源、利润点、利润杠杆、利润通道和利润屏障五个要素组成的。通过锁定目标客户、关注客户价值、举办相关活动、不断拓展收入来源等经营策略,拼多多在较短的时间内得以快速成长。然而这种模式也......
  • 04-多路选择器
    1.多路选择器组合逻辑是Verilog设计中的一个重要组成部分,从电路本质上讲,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路,也没有反馈电路组合逻辑电路输出信号的电平变化仅仅与输入信号的电平变化有关,不涉及信号跳变沿的处理......