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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《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并实现搜索。  
相关文章
|
8天前
|
人工智能 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 市场。
|
监控 数据安全/隐私保护 Python
ERP系统中的业务流程优化与重构解析
【7月更文挑战第25天】 ERP系统中的业务流程优化与重构解析
1313 0
小鸟飞行游戏【附源码】
小鸟飞行游戏【附源码】
223 2
小鸟飞行游戏【附源码】
|
11月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
11月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
160 1
|
SQL Java 数据库
Java一分钟之-Spring Data JPA:简化数据库访问
【6月更文挑战第10天】Spring Data JPA是Spring Data项目的一部分,简化了Java数据库访问。它基于JPA,提供Repository接口,使开发者能通过方法命名约定自动执行SQL,减少代码量。快速上手包括添加相关依赖,配置数据库连接,并定义实体与Repository接口。常见问题涉及主键生成策略、查询方法命名和事务管理。示例展示了分页查询的使用。掌握Spring Data JPA能提升开发效率和代码质量。
285 0
|
监控 安全 物联网
智能家居系统的安全与隐私保护技术
随着物联网技术的飞速发展,智能家居系统逐渐进入千家万户。然而,随之而来的安全与隐私问题亦日益凸显。本文将探讨智能家居系统中存在的安全风险,分析当前采用的主要安全技术措施,并指出用户在享受智能生活时需注意的隐私保护策略。通过深入浅出的方式,旨在增强大众对智能家居安全的认识,并提供实用的保护建议。
|
安全 API 开发者
Python中使用`requests`库进行请求头与自定义参数设置的技术详解
【4月更文挑战第12天】在Python中,`requests`库是一个强大且灵活的HTTP客户端,用于发送所有类型的HTTP请求。在发送请求时,我们经常需要设置请求头和自定义参数来满足不同的需求。本文将详细探讨如何在Python中使用`requests`库进行请求头和自定义参数的设置。
1661 0
|
Java Maven
ProtostuffUtil—快速序列化和反序列化对象工具
ProtostuffUtil—快速序列化和反序列化对象工具
259 0
|
开发框架 前端开发 JavaScript
【专栏】对比分析两种流行的跨平台开发框架——Flutter和React Native,探讨它们的优势、劣势以及适用场景
【4月更文挑战第27天】本文对比分析了Flutter和React Native两大跨平台移动开发框架。Flutter,由Google推出,以其接近原生的性能、快速启动和流畅滚动受青睐,适合高性能和高度定制的项目。React Native,Facebook维护,依赖JavaScript,虽性能受限,但热重载优势和丰富第三方库使其适合快速迭代的项目。两者都在拓展多平台应用,Flutter在桌面和Web,React Native在Windows。选择框架需考虑项目需求、团队技能和性能效率平衡。
742 1