带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(上)

简介: 带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(上)

4.1.2.实现主流搜索引擎广告置顶显示效果


创作人:铭毅天下

审稿人:李捷

 

本应用实践,主要针对 Elasticsearch 如何实现类似百度广告置顶显示,给定商品数据的效果展开介绍,例如实现置顶显示某特定数据,像搜索某关键词,出现关联广告置顶显示的效果。

 

举例:某搜索引擎 “电动汽车”,结果如下:


image.png


上面实现的本质:

 

返回结果的第一页头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 就是要首页置顶显示的结果。

 

image.png



 《Elastic Stack 实战手册》——四、应用实践——4.1 企业搜索应用场景 ——4.1.2.实现主流搜索引擎广告置顶显示效果(下) https://developer.aliyun.com/article/1226381

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
芯片
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
334 0
|
Kubernetes 应用服务中间件 nginx
在K8S里使用filebeat作为sidecar收集nginx日志
通过sidecar方法进行接入,与提供日志的容器部署在同一个pod里,主要是配置statefulset里的containers和configmap里的filebeat.yaml 1.把nginx的日志文件挂载在access_log这个volume里,同时在filebeat这个pod里也挂载access_log这个volume 2.filebeat通过subpath的方法挂载单独一个filebeat.yml到/usr/share/filebeat/filebeat.yml。注意,如果不用subpath挂载单个文件的话,是会覆盖掉/usr/share/filebeat/目录的 3.configm
3158 0
在K8S里使用filebeat作为sidecar收集nginx日志
|
5月前
|
人工智能 API Nacos
MCP Registry 官方发布:Nacos 原生支持,借助 HiMarket 构建企业级私有 MCP 市场
最近,MCP 社区发布了 MCP Registry(2025‑09‑08,预览版),为公开 MCP Server 提供“统一目录服务和开放 API”。Nacos 已原生支持 MCP Registry API,可直接作为“MCP Registry”对外提供标准 REST/OpenAPI 服务端,天然融入企业现有注册中心与配置治理体系,并与 Higress/HiMarket 对接打通,让企业能够高效的构建自己的私有 MCP 市场。
627 55
|
8月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
386 58
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
2873 3
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
监控 数据安全/隐私保护 Python
ERP系统中的业务流程优化与重构解析
【7月更文挑战第25天】 ERP系统中的业务流程优化与重构解析
1510 0
小鸟飞行游戏【附源码】
小鸟飞行游戏【附源码】
302 2
小鸟飞行游戏【附源码】
|
Kubernetes 监控 容器
|
存储 缓存 关系型数据库
MySQL 查询优化方法
在数据库应用中,高效的查询性能至关重要。本文探讨了常用的 MySQL 查询优化方法,包括索引优化(选择合适的索引字段、复合索引、定期维护索引)、查询语句优化(避免全表扫描、限制返回行数、避免使用不必要的函数)、表结构优化(选择合适的数据类型、分区表、定期清理无用数据)及数据库配置优化(调整缓存大小、优化存储引擎参数)。通过这些方法,可以显著提高 MySQL 的查询性能,为应用程序提供更好的用户体验。
1128 4
|
存储 Kubernetes 调度
【赵渝强老师】K8s的有状态控制器StatefulSet
在Kubernetes中,StatefulSets用于部署有状态应用程序,提供持久存储和唯一标识符。与Deployment不同,StatefulSets确保Pod的标识符在重新调度后保持不变,适用于需要稳定网络标识符和持久存储的场景。本文介绍了StatefulSets的创建、扩容与缩容、更新与回滚等操作,并提供了具体示例和视频讲解。
556 0

热门文章

最新文章