重排序任务在搜索、推荐领域已有不少研究工作和落地实践,核心解决的问题是从 N 个结果候选中,生成 Top-K 个结果的排列。

用户直接的交互行为序列(曝光、点击等)

当我们查询 ES 以获取要提供的推荐时,我们需要发送要跳过的用户列表。例如,您最近见过的用户和您已经匹配的用户不应再向您推荐。对于非常活跃的用户,此跳过列表可能相当高。我们在 ES 上使用术语查询作为跳过列表。。通过利用评分函数来处理跳过,我们能够支持更复杂的逻辑向前发展,只要信息/逻辑通过查询参数传递。

我们最感兴趣的插件类型是脚本引擎或脚本插件。这种类型的插件允许我们自定义为文档完成相关性分配的方式。

 

搜索服务中,有大量数据会被几乎每一次请求访问,比如用户画像、商品信息、社区动态信息、倒排池等,这些数据的共同特点是对一致性容忍度较高,且大多有明显的热点。

为了更小RT与更高可用性,搜索服务大量使用了本地缓存做这些数据的一级缓存,Redis 与 ElasticSearch 作为二级缓存。

 

当您需要执行模糊搜索或有排名的结果时。索引是使用预定义数量的分片创建的。更多分片需要迁移到新索引。通常使用ReIndex API(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html)完成

 

基于我们定期下载的 Google Analytics 综合浏览量,归一化为 1 到 0 之间的浮点数。在编写评分函数时,它会执行如下操作:

rank = doc.popularity * 10 + search.score

这似乎产生了相当合理的结果。

但“匹配度”还不止于此。Elasticsearch 有自己的 API 来定义提升,我们的应用方式是:

  • 中的匹配短语title:Boost = 10.0
  • 中的匹配短语body:Boost = 5.0
  • 匹配title:Boost = 2.0
  • 匹配body:Boost = 1.0

然后将其应用于 Elasticsearch 所做的任何其他事情之上,例如“词频”和“逆向文档频率”(tf 和 if)。这篇文章是一个有用的介绍

我们很可能还没有完成这个。我们可能还可以做很多事情来调整无数的旋钮和滑块,以获得匹配文档的最佳排名。

 

模型训练:

在对数据集应用成对变换后,通过训练逻辑回归模型来解决优化问题很简单,可以使用许多现成的库。

我们专门使用了scikit-learn

训练模型时要记住的另一件事是将系数的值限制为非负值,因为在 Elasticsearch 提升值中不能为负值

 

图 4:当搜索服务收到查询时,“召回阶段”负责检索与消费者意图相关的文档,“精确阶段”(或“排序阶段”)对文档重新排序以最好地满足消费者的意图.

 

推荐 排序 架构是什么 搜索推荐排序_推荐 排序 架构是什么

 

 

推荐 排序 架构是什么 搜索推荐排序_搜索_02

 

 

推荐 排序 架构是什么 搜索推荐排序_ElasticSearch_03

 

 

 

推荐 排序 架构是什么 搜索推荐排序_Elastic_04

 

 How to Reindex One Billion Documents in One Hour at SoundCloud

推荐 排序 架构是什么 搜索推荐排序_搜索_05

 

 

How We Improved Our Performance Using ElasticSearch Plugins: Part 2 

推荐 排序 架构是什么 搜索推荐排序_推荐 排序 架构是什么_06

 

 

搜索引擎分布式系统思考实践 | 得物技术

推荐 排序 架构是什么 搜索推荐排序_数据_07

 

得物榜单|全链路生产迁移及B/C端数据存储隔离

推荐 排序 架构是什么 搜索推荐排序_推荐 排序 架构是什么_08

 

 

推荐 排序 架构是什么 搜索推荐排序_ElasticSearch_09

 

5 Database technologies used by 2000 Wix microservices

 

推荐 排序 架构是什么 搜索推荐排序_ElasticSearch_10

 

推荐 排序 架构是什么 搜索推荐排序_ElasticSearch_11