4.1.2.实现主流搜索引擎广告置顶显示效果
创作人:铭毅天下
审稿人:李捷
本应用实践,主要针对 Elasticsearch 如何实现类似百度广告置顶显示,给定商品数据的效果展开介绍,例如实现置顶显示某特定数据,像搜索某关键词,出现关联广告置顶显示的效果。
举例:某搜索引擎 “电动汽车”,结果如下:
上面实现的本质:
返回结果的第一页头1条或多条数据是服务端(如电商网站、主流搜索引擎)指定的数据,而非按照相关度评分计算得出的结果数据。
这时候,不禁要问 Elasticsearch 能实现类似功能不?
拆解实现
Elasticsearch from + size 分页实现机制的原理(大致意思):
page 1:from 0,size:10——返回第 0 到 第 9 条数据。
page 2:from 10,size:10——返回第 0 到 第 19 条数据,截取第 10 到 第 19 条数据;
page 3:from 20,size:10——返回第 0 到 第 29 条数据,截取 第 20到 第 29 条数据。
......
本质是深度分页,肯定越往后翻页响应越慢。
要实现根据固定关键词,添加特定数据置顶显示的效果,探讨方案如下:
方案一:不重新分页,牺牲首页部分数据
不再做重新分页,强制将 page 1 部分数据,换成:类【广告位】置顶显示数据。
显然,会有数据丢失,导致搜索精准率下降,用户一般不会接受。
方案二:重新内存分页
将类【广告位】置顶显示数据 + 已有返回的前 10 页(举例:100 条数据)重新组合后,再分页。
需要内存维护一堆数据,有较大内存开销。用户期望翻页越深(比如:100页+),维护数据越大,处理越慢、延时会越明显。
方案三:其他方案
类主流搜索引擎实现的方法或者新的实现机制。
但此时要想,有没有更简洁的实现方式呢?
Elastic 官方没有考虑这个用户需求吗?
有的,从 Elasticsearch 7.4.0 新增的 pinned query 就能实现这种功能。
Pinned query 介绍
Pinned query 是 Elasticsearch 7.4.0 版本之后,实现的增强检索功能。
Pinned:中文翻译为“固定”。
Pinned query 则可以解释为——固定某些结果,首页置顶显示的检索方式。
下图能形象的说明:绿色的 Pinned results 就是要首页置顶显示的结果。
《Elastic Stack 实战手册》——四、应用实践——4.1 企业搜索应用场景 ——4.1.2.实现主流搜索引擎广告置顶显示效果(下) https://developer.aliyun.com/article/1226381